pcmcia: use mutex for dynid lock
[safe/jmp/linux-2.6] / drivers / pcmcia / i82092.c
index 7979c85..a04f21c 100644 (file)
@@ -5,12 +5,9 @@
  *
  * Author: Arjan Van De Ven <arjanv@redhat.com>
  * Loosly based on i82365.c from the pcmcia-cs package
- *
- * $Id: i82092aa.c,v 1.2 2001/10/23 14:43:34 arjanv Exp $
  */
 
 #include <linux/kernel.h>
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/init.h>
@@ -42,23 +39,27 @@ static struct pci_device_id i82092aa_pci_ids[] = {
 };
 MODULE_DEVICE_TABLE(pci, i82092aa_pci_ids);
 
+#ifdef CONFIG_PM
 static int i82092aa_socket_suspend (struct pci_dev *dev, pm_message_t state)
 {
-       return pcmcia_socket_dev_suspend(&dev->dev, state);
+       return pcmcia_socket_dev_suspend(&dev->dev);
 }
 
 static int i82092aa_socket_resume (struct pci_dev *dev)
 {
        return pcmcia_socket_dev_resume(&dev->dev);
 }
+#endif
 
-static struct pci_driver i82092aa_pci_drv = {
+static struct pci_driver i82092aa_pci_driver = {
        .name           = "i82092aa",
        .id_table       = i82092aa_pci_ids,
        .probe          = i82092aa_pci_probe,
        .remove         = __devexit_p(i82092aa_pci_remove),
+#ifdef CONFIG_PM
        .suspend        = i82092aa_socket_suspend,
        .resume         = i82092aa_socket_resume,
+#endif
 };
 
 
@@ -79,7 +80,7 @@ struct socket_info {
                                    1 = empty socket, 
                                    2 = card but not initialized,
                                    3 = operational card */
-       kio_addr_t io_base;     /* base io address of the socket */
+       unsigned int io_base;   /* base io address of the socket */
        
        struct pcmcia_socket socket;
        struct pci_dev *dev;    /* The PCI device for the socket */
@@ -150,7 +151,7 @@ static int __devinit i82092aa_pci_probe(struct pci_dev *dev, const struct pci_de
 
        /* Register the interrupt handler */
        dprintk(KERN_DEBUG "Requesting interrupt %i \n",dev->irq);
-       if ((ret = request_irq(dev->irq, i82092aa_interrupt, SA_SHIRQ, "i82092aa", i82092aa_interrupt))) {
+       if ((ret = request_irq(dev->irq, i82092aa_interrupt, IRQF_SHARED, "i82092aa", i82092aa_interrupt))) {
                printk(KERN_ERR "i82092aa: Failed to register IRQ %d, aborting\n", dev->irq);
                goto err_out_free_res;
        }
@@ -158,7 +159,7 @@ static int __devinit i82092aa_pci_probe(struct pci_dev *dev, const struct pci_de
        pci_set_drvdata(dev, &sockets[i].socket);
 
        for (i = 0; i<socket_count; i++) {
-               sockets[i].socket.dev.dev = &dev->dev;
+               sockets[i].socket.dev.parent = &dev->dev;
                sockets[i].socket.ops = &i82092aa_operations;
                sockets[i].socket.resource_ops = &pccard_nonstatic_ops;
                ret = pcmcia_register_socket(&sockets[i].socket);
@@ -316,7 +317,7 @@ static int to_cycles(int ns)
 
 /* Interrupt handler functionality */
 
-static irqreturn_t i82092aa_interrupt(int irq, void *dev, struct pt_regs *regs)
+static irqreturn_t i82092aa_interrupt(int irq, void *dev)
 {
        int i;
        int loopcount = 0;
@@ -644,7 +645,12 @@ static int i82092aa_set_mem_map(struct pcmcia_socket *socket, struct pccard_mem_
        if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) ||
             (mem->speed > 1000) ) {
                leave("i82092aa_set_mem_map: invalid address / speed");
-               printk("invalid mem map for socket %i : %lx to %lx with a start of %x \n",sock,region.start, region.end, mem->card_start);
+               printk("invalid mem map for socket %i: %llx to %llx with a "
+                       "start of %x\n",
+                       sock,
+                       (unsigned long long)region.start,
+                       (unsigned long long)region.end,
+                       mem->card_start);
                return -EINVAL;
        }
        
@@ -706,16 +712,13 @@ static int i82092aa_set_mem_map(struct pcmcia_socket *socket, struct pccard_mem_
 
 static int i82092aa_module_init(void)
 {
-       enter("i82092aa_module_init");
-       pci_register_driver(&i82092aa_pci_drv);
-       leave("i82092aa_module_init");
-       return 0;
+       return pci_register_driver(&i82092aa_pci_driver);
 }
 
 static void i82092aa_module_exit(void)
 {
        enter("i82092aa_module_exit");
-       pci_unregister_driver(&i82092aa_pci_drv);
+       pci_unregister_driver(&i82092aa_pci_driver);
        if (sockets[0].io_base>0)
                         release_region(sockets[0].io_base, 2);
        leave("i82092aa_module_exit");