Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / drivers / char / isicom.c
index 0fa2e4a..98310e1 100644 (file)
@@ -879,8 +879,8 @@ static int isicom_open(struct tty_struct *tty, struct file *filp)
        if (tport == NULL)
                return -ENODEV;
        port = container_of(tport, struct isi_port, port);
-       card = &isi_card[BOARD(tty->index)];
 
+       tty->driver_data = port;
        return tty_port_open(tport, tty, filp);
 }
 
@@ -936,7 +936,12 @@ static void isicom_shutdown(struct tty_port *port)
 static void isicom_close(struct tty_struct *tty, struct file *filp)
 {
        struct isi_port *ip = tty->driver_data;
-       struct tty_port *port = &ip->port;
+       struct tty_port *port;
+
+       if (ip == NULL)
+               return;
+
+       port = &ip->port;
        if (isicom_paranoia_check(ip, tty->name, "isicom_close"))
                return;
        tty_port_close(port, tty, filp);
@@ -1568,11 +1573,16 @@ static int __devinit isicom_probe(struct pci_dev *pdev,
        dev_info(&pdev->dev, "ISI PCI Card(Device ID 0x%x)\n", ent->device);
 
        /* allot the first empty slot in the array */
-       for (index = 0; index < BOARD_COUNT; index++)
+       for (index = 0; index < BOARD_COUNT; index++) {
                if (isi_card[index].base == 0) {
                        board = &isi_card[index];
                        break;
                }
+       }
+       if (index == BOARD_COUNT) {
+               retval = -ENODEV;
+               goto err_disable;
+       }
 
        board->index = index;
        board->base = pci_resource_start(pdev, 3);
@@ -1619,6 +1629,7 @@ errunrr:
 errdec:
        board->base = 0;
        card_count--;
+err_disable:
        pci_disable_device(pdev);
 err:
        return retval;