]> err.no Git - linux-2.6/blobdiff - drivers/char/cyclades.c
Char: cyclades, unexport struct cyclades_card
[linux-2.6] / drivers / char / cyclades.c
index 9d22d58f4298637ed9964d8f876199998f9e09bc..1b4ff138b8fffec70913c591ce724a7fa461a09a 100644 (file)
@@ -3616,11 +3616,6 @@ static int cy_tiocmget(struct tty_struct *tty, struct file *file)
                        ((status & CyCTS) ? TIOCM_CTS : 0);
        } else {
                base_addr = cy_card[card].base_addr;
-
-               if (cy_card[card].num_chips != -1) {
-                       return -EINVAL;
-               }
-
                firm_id = cy_card[card].base_addr + ID_ADDRESS;
                if (ISZLOADED(cy_card[card])) {
                        zfw_ctrl = cy_card[card].base_addr +
@@ -4054,14 +4049,6 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
        case CYGETRTSDTR_INV:
                ret_val = info->rtsdtr_inv;
                break;
-       case CYGETCARDINFO:
-               if (copy_to_user(argp, &cy_card[info->card],
-                                sizeof(struct cyclades_card))) {
-                       ret_val = -EFAULT;
-                       break;
-               }
-               ret_val = 0;
-               break;
        case CYGETCD1400VER:
                ret_val = info->chip_rev;
                break;
@@ -4513,7 +4500,7 @@ static void __devinit cy_init_card(struct cyclades_card *cinfo,
        unsigned short chip_number;
        int index, port;
 
-       if (cinfo->num_chips == -1) {   /* Cyclades-Z */
+       if (IS_CYC_Z(*cinfo)) { /* Cyclades-Z */
                mailbox = readl(&((struct RUNTIME_9060 __iomem *)
                                     cinfo->ctl_addr)->mail_box_0);
                nports = (mailbox == ZE_V1) ? ZE_V1_NPORTS : 8;
@@ -5302,56 +5289,19 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev,
 
        return 0;
 }
-#endif
-
-/*
- * ---------------------------------------------------------------------
- * cy_detect_pci() - Test PCI bus presence and Cyclom-Ye/PCI.
- * sets global variables and return the number of PCI boards found.
- * ---------------------------------------------------------------------
- */
-static int __init cy_detect_pci(void)
-{
-#ifdef CONFIG_PCI
-       struct pci_dev *pdev = NULL;
-       unsigned int i, device_id, dev_index = 0;
-
-       for (i = 0; i < NR_CARDS; i++) {
-               /* look for a Cyclades card by vendor and device id */
-               while ((device_id = cy_pci_dev_id[dev_index].device) != 0) {
-                       if ((pdev = pci_get_device(PCI_VENDOR_ID_CYCLADES,
-                                                  device_id, pdev)) == NULL) {
-                               dev_index++;    /* try next device id */
-                       } else {
-                               break;  /* found a board */
-                       }
-               }
 
-               if (device_id == 0)
-                       break;
-
-               i -= !!cy_pci_probe(pdev, &cy_pci_dev_id[dev_index]);
-       }
-
-       return i;
-#else
-       return 0;
-#endif                         /* ifdef CONFIG_PCI */
-}                              /* cy_detect_pci */
-
-static void __devexit cy_pci_release(struct pci_dev *pdev)
+static void __devexit cy_pci_remove(struct pci_dev *pdev)
 {
-#ifdef CONFIG_PCI
        struct cyclades_card *cinfo = pci_get_drvdata(pdev);
        unsigned int i;
 
        /* non-Z with old PLX */
-       if (cinfo->num_chips != -1 && (readb(cinfo->base_addr + CyPLX_VER) &
-                               0x0f) == PLX_9050)
+       if (!IS_CYC_Z(*cinfo) && (readb(cinfo->base_addr + CyPLX_VER) & 0x0f) ==
+                       PLX_9050)
                cy_writeb(cinfo->ctl_addr + 0x4c, 0);
        else
 #ifndef CONFIG_CYZ_INTR
-               if (cinfo->num_chips != -1)
+               if (!IS_CYC_Z(*cinfo))
 #endif
                cy_writew(cinfo->ctl_addr + 0x68,
                                readw(cinfo->ctl_addr + 0x68) & ~0x0900);
@@ -5361,7 +5311,7 @@ static void __devexit cy_pci_release(struct pci_dev *pdev)
                pci_iounmap(pdev, cinfo->ctl_addr);
        if (cinfo->irq
 #ifndef CONFIG_CYZ_INTR
-               && cinfo->num_chips != -1 /* not a Z card */
+               && !IS_CYC_Z(*cinfo)
 #endif /* CONFIG_CYZ_INTR */
                )
                free_irq(cinfo->irq, cinfo);
@@ -5375,9 +5325,16 @@ static void __devexit cy_pci_release(struct pci_dev *pdev)
        for (i = cinfo->first_line; i < cinfo->first_line +
                        cinfo->nports; i++)
                tty_unregister_device(cy_serial_driver, i);
-#endif
 }
 
+static struct pci_driver cy_pci_driver = {
+       .name = "cyclades",
+       .id_table = cy_pci_dev_id,
+       .probe = cy_pci_probe,
+       .remove = __devexit_p(cy_pci_remove)
+};
+#endif
+
 /*
  * This routine prints out the appropriate serial driver version number
  * and identifies which options were configured into this driver.
@@ -5538,13 +5495,12 @@ static int __init cy_init(void)
        /* look for isa boards */
        nboards = cy_detect_isa();
 
+#ifdef CONFIG_PCI
        /* look for pci boards */
-       nboards += cy_detect_pci();
-
-       if (nboards == 0) {
-               retval = -ENODEV;
+       retval = pci_register_driver(&cy_pci_driver);
+       if (retval && !nboards)
                goto err_unr;
-       }
+#endif
 
        return 0;
 err_unr:
@@ -5569,12 +5525,12 @@ static void __exit cy_cleanup_module(void)
 
        put_tty_driver(cy_serial_driver);
 
+#ifdef CONFIG_PCI
+       pci_unregister_driver(&cy_pci_driver);
+#endif
+
        for (i = 0; i < NR_CARDS; i++) {
                if (cy_card[i].base_addr) {
-                       if (cy_card[i].pdev) {
-                               cy_pci_release(cy_card[i].pdev);
-                               continue;
-                       }
                        /* clear interrupt */
                        cy_writeb(cy_card[i].base_addr + Cy_ClrIntr, 0);
                        iounmap(cy_card[i].base_addr);
@@ -5582,7 +5538,7 @@ static void __exit cy_cleanup_module(void)
                                iounmap(cy_card[i].ctl_addr);
                        if (cy_card[i].irq
 #ifndef CONFIG_CYZ_INTR
-                               && cy_card[i].num_chips != -1 /* not a Z card */
+                               && !IS_CYC_Z(cy_card[i])
 #endif /* CONFIG_CYZ_INTR */
                                )
                                free_irq(cy_card[i].irq, &cy_card[i]);