vserver 2.0 rc7
[linux-2.6.git] / drivers / input / gameport / emu10k1-gp.c
index 8f1461a..a011803 100644 (file)
@@ -44,13 +44,13 @@ 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 */
@@ -64,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;
@@ -74,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;
 }
@@ -106,8 +105,9 @@ 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);
 }
 
@@ -118,12 +118,12 @@ static struct pci_driver emu_driver = {
         .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);
 }