X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fgameport%2Femu10k1-gp.c;h=a0118038330a9702f0fd7a03e8269920575f8d18;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=89d469378de89c12377fbef2d1771b39bf6c9773;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/drivers/input/gameport/emu10k1-gp.c b/drivers/input/gameport/emu10k1-gp.c index 89d469378..a01180383 100644 --- a/drivers/input/gameport/emu10k1-gp.c +++ b/drivers/input/gameport/emu10k1-gp.c @@ -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,6 +64,7 @@ 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 = kcalloc(1, 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); }