]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] parport_gsc
authorMatthew Wilcox <willy@debian.org>
Sun, 3 Nov 2002 08:21:42 +0000 (00:21 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Sun, 3 Nov 2002 08:21:42 +0000 (00:21 -0800)
Update to the latest parport_gsc in the PA tree.

drivers/parport/parport_gsc.c

index a5cc97710e9c76d02e408573c09c0f951ac55613..4ddd851cd52a564e7449a8f9cc0b8770dc2f6d62 100644 (file)
@@ -7,7 +7,7 @@
  *      the Free Software Foundation; either version 2 of the License, or
  *      (at your option) any later version.
  *
- *     by Helge Deller <deller@gmx.de>
+ *     (C) 1999-2001 by Helge Deller <deller@gmx.de>
  *
  * 
  * based on parport_pc.c by 
@@ -36,9 +36,9 @@
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <asm/uaccess.h>
+#include <asm/superio.h>
 
 #include <linux/parport.h>
-#include <asm/gsc.h>
 #include <asm/pdc.h>
 #include <asm/hardware.h>
 #include <asm/parport_gsc.h>
@@ -47,6 +47,7 @@
 MODULE_AUTHOR("Helge Deller <deller@gmx.de>");
 MODULE_DESCRIPTION("HP-PARISC PC-style parallel port driver");
 MODULE_SUPPORTED_DEVICE("integrated PC-style parallel port");
+MODULE_LICENSE("GPL");
 
 
 /*
@@ -347,13 +348,6 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
        struct parport tmp;
        struct parport *p = &tmp;
 
-#if 1
-#warning Take this out when region handling works again, <deller@gmx,de>
-#else
-       if (check_region(base, 3)) 
-           return NULL;
-#endif
-           
        priv = kmalloc (sizeof (struct parport_gsc_private), GFP_KERNEL);
        if (!priv) {
                printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base);
@@ -430,12 +424,6 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
        printk("]\n");
        parport_proc_register(p);
 
-       request_region (p->base, 3, p->name);
-       if (p->size > 3)
-               request_region (p->base + 3, p->size - 3, p->name);
-       if (p->modes & PARPORT_MODE_ECP)
-               request_region (p->base_hi, 3, p->name);
-
        if (p->irq != PARPORT_IRQ_NONE) {
                if (request_irq (p->irq, parport_gsc_interrupt,
                                 0, p->name, p)) {
@@ -465,62 +453,56 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
 
 static int __initdata parport_count;
 
-static int __init parport_init_chip(struct hp_device *d, struct pa_iodc_driver *dri)
+static int __devinit parport_init_chip(struct parisc_device *dev)
 {
        unsigned long port;
-       int irq;
-
-       irq = busdevice_alloc_irq(d); 
 
-       if (!irq) {
-           printk(KERN_DEBUG "IRQ not found for parallel device at 0x%p\n", d->hpa);
-           return -ENODEV;
+       if (!dev->irq) {
+               printk("IRQ not found for parallel device at 0x%lx\n", dev->hpa);
+               return -ENODEV;
        }
 
-       port = ((unsigned long) d->hpa) + PARPORT_GSC_OFFSET;
+       port = dev->hpa + PARPORT_GSC_OFFSET;
        
-       /* 
-           some older machines with ASP-chip don't support the enhanced parport modes 
-       */
-       if (!pdc_add_valid( (void *)(port+4))) {
-           /* Initialize bidirectional-mode (0x10) & data-tranfer-mode #1 (0x20) */
-           printk(KERN_DEBUG "%s: initialize bidirectional-mode.\n", __FUNCTION__);
-           parport_writeb ( (0x10 + 0x20), port + 4);
+       /* some older machines with ASP-chip don't support
+        * the enhanced parport modes.
+        */
+       if (boot_cpu_data.cpu_type > pcxt && !pdc_add_valid(port+4)) {
+
+               /* Initialize bidirectional-mode (0x10) & data-tranfer-mode #1 (0x20) */
+               printk("%s: initialize bidirectional-mode.\n", __FUNCTION__);
+               parport_writeb ( (0x10 + 0x20), port + 4);
+
        } else {
-           printk(KERN_DEBUG "%s: enhanced parport-modes not supported.\n", __FUNCTION__);
+               printk("%s: enhanced parport-modes not supported.\n", __FUNCTION__);
        }
        
-       if (parport_gsc_probe_port(port, 0, 
-                   irq, /* PARPORT_IRQ_NONE */
-                   PARPORT_DMA_NONE, NULL))
-           parport_count++;
+       if (parport_gsc_probe_port(port, 0, dev->irq,
+                       /* PARPORT_IRQ_NONE */ PARPORT_DMA_NONE, NULL))
+               parport_count++;
 
        return 0;
 }
 
-static struct pa_iodc_driver parport_drivers_for[] __initdata = {
-  {HPHW_FIO, 0x0, 0x0, 0x74, 0x0, 0,                   /* 715/64 */
-       DRIVER_CHECK_SVERSION + DRIVER_CHECK_HWTYPE,
-       "parallel device", "HP 7xx - Series", (void *) parport_init_chip},
-  { 0 }
+static struct parisc_device_id parport_tbl[] = {
+       { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x74 },
+       { 0, }
 };
 
-int __init parport_gsc_init(void)
-{
-       parport_count = 0;
-       
-       register_driver(parport_drivers_for);
-
-       return 0;
-}
+MODULE_DEVICE_TABLE(parisc, parport_tbl);
 
+static struct parisc_driver parport_driver = {
+       name:           "Parallel",
+       id_table:       parport_tbl,
+       probe:          parport_init_chip,
+};
 
-static int __init parport_gsc_init_module(void)
-{      
-       return !parport_gsc_init();
+int __devinit parport_gsc_init(void)
+{
+       return register_parisc_driver(&parport_driver);
 }
 
-static void __exit parport_gsc_exit_module(void)
+static void __devexit parport_gsc_exit(void)
 {
        struct parport *p = parport_enumerate(), *tmp;
        while (p) {
@@ -532,11 +514,6 @@ static void __exit parport_gsc_exit_module(void)
                                free_dma(p->dma);
                        if (p->irq != PARPORT_IRQ_NONE)
                                free_irq(p->irq, p);
-                       release_region(p->base, 3);
-                       if (p->size > 3)
-                               release_region(p->base + 3, p->size - 3);
-                       if (p->modes & PARPORT_MODE_ECP)
-                               release_region(p->base_hi, 3);
                        parport_proc_unregister(p);
                        if (priv->dma_buf)
                                pci_free_consistent(priv->dev, PAGE_SIZE,
@@ -548,7 +525,8 @@ static void __exit parport_gsc_exit_module(void)
                }
                p = tmp;
        }
+       unregister_parisc_driver(&parport_driver);
 }
 
-module_init(parport_gsc_init_module);
-module_exit(parport_gsc_exit_module);
+module_init(parport_gsc_init);
+module_exit(parport_gsc_exit);