]> err.no Git - linux-2.6/blobdiff - drivers/char/mxser.c
[TG3]: Bump driver version and reldate.
[linux-2.6] / drivers / char / mxser.c
index 4b783d9bbd598ad883796d3f9bbe0d1d87988036..ea725a9964e2007075db5e814422ceed52f84ee3 100644 (file)
@@ -38,7 +38,6 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
-#include <linux/version.h>
 #include <linux/autoconf.h>
 #include <linux/errno.h>
 #include <linux/signal.h>
@@ -494,14 +493,18 @@ static int __init mxser_module_init(void)
 
 static void __exit mxser_module_exit(void)
 {
-       int i, err = 0;
+       int i, err;
 
        if (verbose)
                printk(KERN_DEBUG "Unloading module mxser ...\n");
 
-       if ((err |= tty_unregister_driver(mxvar_sdriver)))
+       err = tty_unregister_driver(mxvar_sdriver);
+       if (!err)
+               put_tty_driver(mxvar_sdriver);
+       else
                printk(KERN_ERR "Couldn't unregister MOXA Smartio/Industio family serial driver\n");
 
+
        for (i = 0; i < MXSER_BOARDS; i++) {
                struct pci_dev *pdev;
 
@@ -690,7 +693,6 @@ static int mxser_get_PCI_conf(int busnum, int devnum, int board_type, struct mxs
 static int mxser_init(void)
 {
        int i, m, retval, b, n;
-       int ret1;
        struct pci_dev *pdev = NULL;
        int index;
        unsigned char busnum, devnum;
@@ -811,7 +813,7 @@ static int mxser_init(void)
 
        /* start finding PCI board here */
 #ifdef CONFIG_PCI
-       n = (sizeof(mxser_pcibrds) / sizeof(mxser_pcibrds[0])) - 1;
+       n = ARRAY_SIZE(mxser_pcibrds) - 1;
        index = 0;
        b = 0;
        while (b < n) {
@@ -854,14 +856,11 @@ static int mxser_init(void)
        }
 #endif
 
-       ret1 = 0;
-       if (!(ret1 = tty_register_driver(mxvar_sdriver))) {
-               return 0;
-       } else
+       retval = tty_register_driver(mxvar_sdriver);
+       if (retval) {
                printk(KERN_ERR "Couldn't install MOXA Smartio/Industio family driver !\n");
+               put_tty_driver(mxvar_sdriver);
 
-
-       if (ret1) {
                for (i = 0; i < MXSER_BOARDS; i++) {
                        if (mxsercfg[i].board_type == -1)
                                continue;
@@ -870,10 +869,10 @@ static int mxser_init(void)
                                //todo: release io, vector
                        }
                }
-               return -1;
+               return retval;
        }
 
-       return (0);
+       return 0;
 }
 
 static void mxser_do_softint(void *private_)
@@ -917,6 +916,9 @@ static int mxser_open(struct tty_struct *tty, struct file *filp)
        struct mxser_struct *info;
        int retval, line;
 
+       /* initialize driver_data in case something fails */
+       tty->driver_data = NULL;
+
        line = tty->index;
        if (line == MXSER_PORTS)
                return 0;
@@ -979,7 +981,7 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
        if (tty->index == MXSER_PORTS)
                return;
        if (!info)
-               BUG();
+               return;
 
        spin_lock_irqsave(&info->slock, flags);
 
@@ -1980,7 +1982,7 @@ static void mxser_receive_chars(struct mxser_struct *info, int *status)
 
        spin_lock_irqsave(&info->slock, flags);
 
-       recv_room = tty->ldisc.receive_room(tty);
+       recv_room = tty->receive_room;
        if ((recv_room == 0) && (!info->ldisc_stop_rx)) {
                //mxser_throttle(tty);
                mxser_stoprx(tty);