diff options
| author | Matthew Wilcox <willy@debian.org> | 2002-11-03 00:21:42 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-11-03 00:21:42 -0800 |
| commit | b731ec4f84bc380eb28eb534e324b4b4eeec8697 (patch) | |
| tree | 91b9d5b29f9fb910690573d7bc215d238018d887 | |
| parent | 57b1dfbd5b4a39db574b45285cc34bbfc1504a36 (diff) | |
[PATCH] parport_gsc
Update to the latest parport_gsc in the PA tree.
| -rw-r--r-- | drivers/parport/parport_gsc.c | 96 |
1 files changed, 37 insertions, 59 deletions
diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c index a5cc97710e9c..4ddd851cd52a 100644 --- a/drivers/parport/parport_gsc.c +++ b/drivers/parport/parport_gsc.c @@ -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); |
