X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fserio%2Fgscps2.c;h=c0b1e4becad3c7b9a76f532589441188da629bce;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=cd9f987fb83da53c4e1f83f012541aa8a1f8958d;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index cd9f987fb..c0b1e4bec 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c @@ -1,9 +1,9 @@ /* * drivers/input/serio/gscps2.c * - * Copyright (c) 2004 Helge Deller + * Copyright (c) 2004-2006 Helge Deller * Copyright (c) 2002 Laurent Canet - * Copyright (c) 2002 Thibaut Varene + * Copyright (c) 2002 Thibaut Varene * * Pieces of code based on linux-2.4's hp_mouse.c & hp_keyb.c * Copyright (c) 1999 Alex deVries @@ -37,8 +37,8 @@ #include #include -MODULE_AUTHOR("Laurent Canet , Thibaut Varene , Helge Deller "); -MODULE_DESCRIPTION("HP GSC PS/2 port driver"); +MODULE_AUTHOR("Laurent Canet , Thibaut Varene , Helge Deller "); +MODULE_DESCRIPTION("HP GSC PS2 port driver"); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(parisc, gscps2_device_tbl); @@ -211,9 +211,6 @@ static void gscps2_reset(struct gscps2port *ps2port) writeb(0xff, addr+GSC_RESET); gscps2_flush(ps2port); spin_unlock_irqrestore(&ps2port->lock, flags); - - /* enable it */ - gscps2_enable(ps2port, ENABLE); } static LIST_HEAD(ps2port_list); @@ -307,6 +304,9 @@ static int gscps2_open(struct serio *port) gscps2_reset(ps2port); + /* enable it */ + gscps2_enable(ps2port, ENABLE); + gscps2_interrupt(0, NULL, NULL); return 0; @@ -322,19 +322,6 @@ static void gscps2_close(struct serio *port) gscps2_enable(ps2port, DISABLE); } -static struct serio gscps2_serio_port = -{ - .name = "GSC PS/2", - .idbus = BUS_GSC, - .idvendor = PCI_VENDOR_ID_HP, - .idproduct = 0x0001, - .idversion = 0x0010, - .type = SERIO_8042, - .write = gscps2_write, - .open = gscps2_open, - .close = gscps2_close, -}; - /** * gscps2_probe() - Probes PS2 devices * @return: success/error report @@ -344,7 +331,7 @@ static int __init gscps2_probe(struct parisc_device *dev) { struct gscps2port *ps2port; struct serio *serio; - unsigned long hpa = dev->hpa; + unsigned long hpa = dev->hpa.start; int ret; if (!dev->irq) @@ -367,7 +354,7 @@ static int __init gscps2_probe(struct parisc_device *dev) memset(serio, 0, sizeof(struct serio)); ps2port->port = serio; ps2port->padev = dev; - ps2port->addr = ioremap(hpa, GSC_STATUS + 4); + ps2port->addr = ioremap_nocache(hpa, GSC_STATUS + 4); spin_lock_init(&ps2port->lock); gscps2_reset(ps2port); @@ -376,19 +363,13 @@ static int __init gscps2_probe(struct parisc_device *dev) snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s", (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse"); strlcpy(serio->phys, dev->dev.bus_id, sizeof(serio->phys)); - serio->idbus = BUS_GSC; - serio->idvendor = PCI_VENDOR_ID_HP; - serio->idproduct = 0x0001; - serio->idversion = 0x0010; - serio->type = SERIO_8042; + serio->id.type = SERIO_8042; serio->write = gscps2_write; serio->open = gscps2_open; serio->close = gscps2_close; serio->port_data = ps2port; serio->dev.parent = &dev->dev; - list_add_tail(&ps2port->node, &ps2port_list); - ret = -EBUSY; if (request_irq(dev->irq, gscps2_interrupt, SA_SHIRQ, ps2port->port->name, ps2port)) goto fail_miserably; @@ -413,15 +394,16 @@ static int __init gscps2_probe(struct parisc_device *dev) serio_register_port(ps2port->port); + list_add_tail(&ps2port->node, &ps2port_list); + return 0; fail: free_irq(dev->irq, ps2port); fail_miserably: - list_del(&ps2port->node); iounmap(ps2port->addr); - release_mem_region(dev->hpa, GSC_STATUS + 4); + release_mem_region(dev->hpa.start, GSC_STATUS + 4); fail_nomem: kfree(ps2port); @@ -461,7 +443,7 @@ static struct parisc_device_id gscps2_device_tbl[] = { }; static struct parisc_driver parisc_ps2_driver = { - .name = "GSC PS/2", + .name = "gsc_ps2", .id_table = gscps2_device_tbl, .probe = gscps2_probe, .remove = gscps2_remove,