X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fgameport%2Femu10k1-gp.c;h=462f8d300aae5629719c58a983627fed065879a5;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=ec18fb32b7a530243e4baa57abc1f2f306a758b5;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/input/gameport/emu10k1-gp.c b/drivers/input/gameport/emu10k1-gp.c index ec18fb32b..462f8d300 100644 --- a/drivers/input/gameport/emu10k1-gp.c +++ b/drivers/input/gameport/emu10k1-gp.c @@ -11,18 +11,18 @@ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to , or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic @@ -44,14 +44,17 @@ MODULE_LICENSE("GPL"); struct emu { struct pci_dev *dev; - struct gameport gameport; + struct gameport *gameport; + int io; int size; - char phys[32]; }; - + static struct pci_device_id emu_tbl[] = { + { 0x1102, 0x7002, PCI_ANY_ID, PCI_ANY_ID }, /* SB Live gameport */ { 0x1102, 0x7003, PCI_ANY_ID, PCI_ANY_ID }, /* Audigy gameport */ + { 0x1102, 0x7004, PCI_ANY_ID, PCI_ANY_ID }, /* Dell SB Live */ + { 0x1102, 0x7005, PCI_ANY_ID, PCI_ANY_ID }, /* Audigy LS gameport */ { 0, } }; @@ -61,7 +64,8 @@ static int __devinit emu_probe(struct pci_dev *pdev, const struct pci_device_id { int ioport, iolen; struct emu *emu; - + struct gameport *port; + if (pci_enable_device(pdev)) return -EBUSY; @@ -71,31 +75,29 @@ static int __devinit emu_probe(struct pci_dev *pdev, const struct pci_device_id if (!request_region(ioport, iolen, "emu10k1-gp")) return -EBUSY; - if (!(emu = kmalloc(sizeof(struct emu), GFP_KERNEL))) { - printk(KERN_ERR "emu10k1-gp: Memory allocation failed.\n"); + emu = kzalloc(sizeof(struct emu), GFP_KERNEL); + port = gameport_allocate_port(); + if (!emu || !port) { + printk(KERN_ERR "emu10k1-gp: Memory allocation failed\n"); release_region(ioport, iolen); + kfree(emu); + gameport_free_port(port); return -ENOMEM; } - memset(emu, 0, sizeof(struct emu)); - - sprintf(emu->phys, "pci%s/gameport0", pci_name(pdev)); + emu->io = ioport; emu->size = iolen; emu->dev = pdev; + emu->gameport = port; - emu->gameport.io = ioport; - emu->gameport.name = pci_name(pdev); - emu->gameport.phys = emu->phys; - emu->gameport.id.bustype = BUS_PCI; - emu->gameport.id.vendor = pdev->vendor; - emu->gameport.id.product = pdev->device; + gameport_set_name(port, "EMU10K1"); + gameport_set_phys(port, "pci%s/gameport0", pci_name(pdev)); + port->dev.parent = &pdev->dev; + port->io = ioport; pci_set_drvdata(pdev, emu); - gameport_register_port(&emu->gameport); - - printk(KERN_INFO "gameport: pci%s speed %d kHz\n", - pci_name(pdev), emu->gameport.speed); + gameport_register_port(port); return 0; } @@ -103,24 +105,25 @@ static int __devinit emu_probe(struct pci_dev *pdev, const struct pci_device_id static void __devexit emu_remove(struct pci_dev *pdev) { struct emu *emu = pci_get_drvdata(pdev); - gameport_unregister_port(&emu->gameport); - release_region(emu->gameport.io, emu->size); + + gameport_unregister_port(emu->gameport); + release_region(emu->io, emu->size); kfree(emu); } static struct pci_driver emu_driver = { - .name = "Emu10k1 Gameport", + .name = "Emu10k1_gameport", .id_table = emu_tbl, .probe = emu_probe, .remove = __devexit_p(emu_remove), }; -int __init emu_init(void) +static int __init emu_init(void) { - return pci_module_init(&emu_driver); + return pci_register_driver(&emu_driver); } -void __exit emu_exit(void) +static void __exit emu_exit(void) { pci_unregister_driver(&emu_driver); }