Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Mar 2012 23:00:48 +0000 (16:00 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Mar 2012 23:00:48 +0000 (16:00 -0700)
Pull a few PCMCIA updates from Dominik Brodowski.

Fix up trivial conflict (modified code in question had been removed) in
drivers/pcmcia/soc_common.c.

* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia:
  pcmcia at91_cf: fix raw gpio number usage
  ARM: pxa: fix error handling in pxa2xx_drv_pcmcia_probe
  pcmcia: Convert to DEFINE_PCI_DEVICE_TABLE
  pcmcia: convert drivers/pcmcia/* to use module_platform_driver()
  pcmcia: irq: Remove IRQF_DISABLED

1  2 
drivers/pcmcia/at91_cf.c
drivers/pcmcia/i82092.c
drivers/pcmcia/m8xx_pcmcia.c
drivers/pcmcia/pd6729.c
drivers/pcmcia/pxa2xx_viper.c
drivers/pcmcia/xxs1500_ss.c

diff --combined drivers/pcmcia/at91_cf.c
index 1dd68f502634e4725fa9a2c97328d370236bcbdf,4127441015db8d30687e3775cca5e352be0e54b5..9694c1e783a558bbdf4ea6b11a1674abe78c55ef
  #include <linux/init.h>
  #include <linux/interrupt.h>
  #include <linux/slab.h>
+ #include <linux/gpio.h>
  
  #include <pcmcia/ss.h>
  
  #include <mach/hardware.h>
  #include <asm/io.h>
  #include <asm/sizes.h>
- #include <asm/gpio.h>
  
  #include <mach/board.h>
  #include <mach/at91rm9200_mc.h>
 +#include <mach/at91_ramc.h>
  
  
  /*
@@@ -70,7 -69,7 +70,7 @@@ static irqreturn_t at91_cf_irq(int irq
  {
        struct at91_cf_socket *cf = _cf;
  
-       if (irq == cf->board->det_pin) {
+       if (irq == gpio_to_irq(cf->board->det_pin)) {
                unsigned present = at91_cf_present(cf);
  
                /* kick pccard as needed */
@@@ -96,8 -95,8 +96,8 @@@ static int at91_cf_get_status(struct pc
  
        /* NOTE: CF is always 3VCARD */
        if (at91_cf_present(cf)) {
-               int rdy = cf->board->irq_pin;   /* RDY/nIRQ */
-               int vcc = cf->board->vcc_pin;
+               int rdy = gpio_is_valid(cf->board->irq_pin);    /* RDY/nIRQ */
+               int vcc = gpio_is_valid(cf->board->vcc_pin);
  
                *sp = SS_DETECT | SS_3VCARD;
                if (!rdy || gpio_get_value(rdy))
@@@ -118,7 -117,7 +118,7 @@@ at91_cf_set_socket(struct pcmcia_socke
        cf = container_of(sock, struct at91_cf_socket, socket);
  
        /* switch Vcc if needed and possible */
-       if (cf->board->vcc_pin) {
+       if (gpio_is_valid(cf->board->vcc_pin)) {
                switch (s->Vcc) {
                        case 0:
                                gpio_set_value(cf->board->vcc_pin, 0);
@@@ -157,7 -156,7 +157,7 @@@ static int at91_cf_set_io_map(struct pc
        /*
         * Use 16 bit accesses unless/until we need 8-bit i/o space.
         */
 -      csr = at91_sys_read(AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW;
 +      csr = at91_ramc_read(0, AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW;
  
        /*
         * NOTE: this CF controller ignores IOIS16, so we can't really do
                csr |= AT91_SMC_DBW_16;
                pr_debug("%s: 16bit i/o bus\n", driver_name);
        }
 -      at91_sys_write(AT91_SMC_CSR(cf->board->chipselect), csr);
 +      at91_ramc_write(0, AT91_SMC_CSR(cf->board->chipselect), csr);
  
        io->start = cf->socket.io_offset;
        io->stop = io->start + SZ_2K - 1;
@@@ -222,7 -221,7 +222,7 @@@ static int __init at91_cf_probe(struct 
        struct resource         *io;
        int                     status;
  
-       if (!board || !board->det_pin || !board->rst_pin)
+       if (!board || !gpio_is_valid(board->det_pin) || !gpio_is_valid(board->rst_pin))
                return -ENODEV;
  
        io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        status = gpio_request(board->det_pin, "cf_det");
        if (status < 0)
                goto fail0;
-       status = request_irq(board->det_pin, at91_cf_irq, 0, driver_name, cf);
+       status = request_irq(gpio_to_irq(board->det_pin), at91_cf_irq, 0, driver_name, cf);
        if (status < 0)
                goto fail00;
        device_init_wakeup(&pdev->dev, 1);
        if (status < 0)
                goto fail0a;
  
-       if (board->vcc_pin) {
+       if (gpio_is_valid(board->vcc_pin)) {
                status = gpio_request(board->vcc_pin, "cf_vcc");
                if (status < 0)
                        goto fail0b;
         * unless we report that we handle everything (sigh).
         * (Note:  DK board doesn't wire the IRQ pin...)
         */
-       if (board->irq_pin) {
+       if (gpio_is_valid(board->irq_pin)) {
                status = gpio_request(board->irq_pin, "cf_irq");
                if (status < 0)
                        goto fail0c;
-               status = request_irq(board->irq_pin, at91_cf_irq,
+               status = request_irq(gpio_to_irq(board->irq_pin), at91_cf_irq,
                                IRQF_SHARED, driver_name, cf);
                if (status < 0)
                        goto fail0d;
-               cf->socket.pci_irq = board->irq_pin;
+               cf->socket.pci_irq = gpio_to_irq(board->irq_pin);
        } else
                cf->socket.pci_irq = nr_irqs + 1;
  
        }
  
        pr_info("%s: irqs det #%d, io #%d\n", driver_name,
-               board->det_pin, board->irq_pin);
+               gpio_to_irq(board->det_pin), gpio_to_irq(board->irq_pin));
  
        cf->socket.owner = THIS_MODULE;
        cf->socket.dev.parent = &pdev->dev;
@@@ -312,19 -311,19 +312,19 @@@ fail2
  fail1:
        if (cf->socket.io_offset)
                iounmap((void __iomem *) cf->socket.io_offset);
-       if (board->irq_pin) {
-               free_irq(board->irq_pin, cf);
+       if (gpio_is_valid(board->irq_pin)) {
+               free_irq(gpio_to_irq(board->irq_pin), cf);
  fail0d:
                gpio_free(board->irq_pin);
        }
  fail0c:
-       if (board->vcc_pin)
+       if (gpio_is_valid(board->vcc_pin))
                gpio_free(board->vcc_pin);
  fail0b:
        gpio_free(board->rst_pin);
  fail0a:
        device_init_wakeup(&pdev->dev, 0);
-       free_irq(board->det_pin, cf);
+       free_irq(gpio_to_irq(board->det_pin), cf);
  fail00:
        gpio_free(board->det_pin);
  fail0:
@@@ -341,15 -340,15 +341,15 @@@ static int __exit at91_cf_remove(struc
        pcmcia_unregister_socket(&cf->socket);
        release_mem_region(io->start, resource_size(io));
        iounmap((void __iomem *) cf->socket.io_offset);
-       if (board->irq_pin) {
-               free_irq(board->irq_pin, cf);
+       if (gpio_is_valid(board->irq_pin)) {
+               free_irq(gpio_to_irq(board->irq_pin), cf);
                gpio_free(board->irq_pin);
        }
-       if (board->vcc_pin)
+       if (gpio_is_valid(board->vcc_pin))
                gpio_free(board->vcc_pin);
        gpio_free(board->rst_pin);
        device_init_wakeup(&pdev->dev, 0);
-       free_irq(board->det_pin, cf);
+       free_irq(gpio_to_irq(board->det_pin), cf);
        gpio_free(board->det_pin);
        kfree(cf);
        return 0;
@@@ -363,9 -362,9 +363,9 @@@ static int at91_cf_suspend(struct platf
        struct at91_cf_data     *board = cf->board;
  
        if (device_may_wakeup(&pdev->dev)) {
-               enable_irq_wake(board->det_pin);
-               if (board->irq_pin)
-                       enable_irq_wake(board->irq_pin);
+               enable_irq_wake(gpio_to_irq(board->det_pin));
+               if (gpio_is_valid(board->irq_pin))
+                       enable_irq_wake(gpio_to_irq(board->irq_pin));
        }
        return 0;
  }
@@@ -376,9 -375,9 +376,9 @@@ static int at91_cf_resume(struct platfo
        struct at91_cf_data     *board = cf->board;
  
        if (device_may_wakeup(&pdev->dev)) {
-               disable_irq_wake(board->det_pin);
-               if (board->irq_pin)
-                       disable_irq_wake(board->irq_pin);
+               disable_irq_wake(gpio_to_irq(board->det_pin));
+               if (gpio_is_valid(board->irq_pin))
+                       disable_irq_wake(gpio_to_irq(board->irq_pin));
        }
  
        return 0;
diff --combined drivers/pcmcia/i82092.c
index 0b66bfc0e14872c2715ae6bfdf06d716300ea1b2,17035236ad2e69cb5f57e9a02a45560b3dc06e48..4e8831bdb6efb2af19e4a25114cbc80daabc3bb7
@@@ -17,6 -17,7 +17,6 @@@
  
  #include <pcmcia/ss.h>
  
 -#include <asm/system.h>
  #include <asm/io.h>
  
  #include "i82092aa.h"
  MODULE_LICENSE("GPL");
  
  /* PCI core routines */
- static struct pci_device_id i82092aa_pci_ids[] = {
-       {
-             .vendor = PCI_VENDOR_ID_INTEL,
-             .device = PCI_DEVICE_ID_INTEL_82092AA_0,
-             .subvendor = PCI_ANY_ID,
-             .subdevice = PCI_ANY_ID,
-        },
-        {} 
+ static DEFINE_PCI_DEVICE_TABLE(i82092aa_pci_ids) = {
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82092AA_0) },
+       { }
  };
  MODULE_DEVICE_TABLE(pci, i82092aa_pci_ids);
  
index a317defd616d0dab1ecb2b5482498ddb9978bde0,b120928cf3e9e2e92cc9aedc04cdbaec0ba2354c..a3a851e49321542ac84659f4f3315219163430ae
@@@ -52,6 -52,7 +52,6 @@@
  #include <linux/of_platform.h>
  
  #include <asm/io.h>
 -#include <asm/system.h>
  #include <asm/time.h>
  #include <asm/mpc8xx.h>
  #include <asm/8xx_immap.h>
@@@ -1303,15 -1304,4 +1303,4 @@@ static struct platform_driver m8xx_pcmc
        .remove = m8xx_remove,
  };
  
- static int __init m8xx_init(void)
- {
-       return platform_driver_register(&m8xx_pcmcia_driver);
- }
- static void __exit m8xx_exit(void)
- {
-       platform_driver_unregister(&m8xx_pcmcia_driver);
- }
- module_init(m8xx_init);
- module_exit(m8xx_exit);
+ module_platform_driver(m8xx_pcmcia_driver);
diff --combined drivers/pcmcia/pd6729.c
index 0f8b70b27762f88485ec352887ce2b2dc810332a,5928247a4af0901f9e125dad6109babc6679b944..253e3867dec713e8d1b5df9167a8da2337cb7465
@@@ -19,6 -19,7 +19,6 @@@
  
  #include <pcmcia/ss.h>
  
 -#include <asm/system.h>
  
  #include "pd6729.h"
  #include "i82365.h"
@@@ -762,13 -763,8 +762,8 @@@ static void __devexit pd6729_pci_remove
        kfree(socket);
  }
  
- static struct pci_device_id pd6729_pci_ids[] = {
-       {
-               .vendor         = PCI_VENDOR_ID_CIRRUS,
-               .device         = PCI_DEVICE_ID_CIRRUS_6729,
-               .subvendor      = PCI_ANY_ID,
-               .subdevice      = PCI_ANY_ID,
-       },
+ static DEFINE_PCI_DEVICE_TABLE(pd6729_pci_ids) = {
+       { PCI_DEVICE(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_6729) },
        { }
  };
  MODULE_DEVICE_TABLE(pci, pd6729_pci_ids);
index adfae4987a42a7077242ccceedcc9af1df6b2d2d,44f5c7fc9b6ff74db72e0e9e1c80fad9e398091c..cb0c37ec7f246e1c978955a22736fbf5c6978669
  
  static struct platform_device *arcom_pcmcia_dev;
  
 -static struct pcmcia_irqs irqs[] = {
 -      {
 -              .sock   = 0,
 -              .str    = "PCMCIA_CD",
 -      },
 -};
 -
  static inline struct arcom_pcmcia_pdata *viper_get_pdata(void)
  {
        return arcom_pcmcia_dev->dev.platform_data;
@@@ -42,28 -49,38 +42,28 @@@ static int viper_pcmcia_hw_init(struct 
        struct arcom_pcmcia_pdata *pdata = viper_get_pdata();
        unsigned long flags;
  
 -      skt->socket.pci_irq = gpio_to_irq(pdata->rdy_gpio);
 -      irqs[0].irq = gpio_to_irq(pdata->cd_gpio);
 -
 -      if (gpio_request(pdata->cd_gpio, "CF detect"))
 -              goto err_request_cd;
 -
 -      if (gpio_request(pdata->rdy_gpio, "CF ready"))
 -              goto err_request_rdy;
 +      skt->stat[SOC_STAT_CD].gpio = pdata->cd_gpio;
 +      skt->stat[SOC_STAT_CD].name = "PCMCIA_CD";
 +      skt->stat[SOC_STAT_RDY].gpio = pdata->rdy_gpio;
 +      skt->stat[SOC_STAT_RDY].name = "CF ready";
  
        if (gpio_request(pdata->pwr_gpio, "CF power"))
                goto err_request_pwr;
  
        local_irq_save(flags);
  
 -      if (gpio_direction_output(pdata->pwr_gpio, 0) ||
 -          gpio_direction_input(pdata->cd_gpio) ||
 -          gpio_direction_input(pdata->rdy_gpio)) {
 +      if (gpio_direction_output(pdata->pwr_gpio, 0)) {
                local_irq_restore(flags);
                goto err_dir;
        }
  
        local_irq_restore(flags);
  
 -      return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 +      return 0;
  
  err_dir:
        gpio_free(pdata->pwr_gpio);
  err_request_pwr:
 -      gpio_free(pdata->rdy_gpio);
 -err_request_rdy:
 -      gpio_free(pdata->cd_gpio);
 -err_request_cd:
        dev_err(&arcom_pcmcia_dev->dev, "Failed to setup PCMCIA GPIOs\n");
        return -1;
  }
@@@ -75,12 -92,22 +75,12 @@@ static void viper_pcmcia_hw_shutdown(st
  {
        struct arcom_pcmcia_pdata *pdata = viper_get_pdata();
  
 -      soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
        gpio_free(pdata->pwr_gpio);
 -      gpio_free(pdata->rdy_gpio);
 -      gpio_free(pdata->cd_gpio);
  }
  
  static void viper_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
                                      struct pcmcia_state *state)
  {
 -      struct arcom_pcmcia_pdata *pdata = viper_get_pdata();
 -
 -      state->detect = !gpio_get_value(pdata->cd_gpio);
 -      state->ready  = !!gpio_get_value(pdata->rdy_gpio);
 -      state->bvd1   = 1;
 -      state->bvd2   = 1;
 -      state->wrprot = 0;
        state->vs_3v  = 1; /* Can only apply 3.3V */
        state->vs_Xv  = 0;
  }
@@@ -177,18 -204,7 +177,7 @@@ static struct platform_driver viper_pcm
        .id_table       = viper_pcmcia_id_table,
  };
  
- static int __init viper_pcmcia_init(void)
- {
-       return platform_driver_register(&viper_pcmcia_driver);
- }
- static void __exit viper_pcmcia_exit(void)
- {
-       return platform_driver_unregister(&viper_pcmcia_driver);
- }
- module_init(viper_pcmcia_init);
- module_exit(viper_pcmcia_exit);
+ module_platform_driver(viper_pcmcia_driver);
  
  MODULE_DEVICE_TABLE(platform, viper_pcmcia_id_table);
  MODULE_LICENSE("GPL");
index 8f6698074f8ed7d0495a55c5eba67f7927b53ad8,1ceff698c654564d7be37fde6abe81c4cdfa5855..fd5fbd10aad07e853878ff53a3c5280dbc330bdc
@@@ -21,6 -21,7 +21,6 @@@
  #include <pcmcia/cistpl.h>
  
  #include <asm/irq.h>
 -#include <asm/system.h>
  #include <asm/mach-au1x00/au1000.h>
  
  #define MEM_MAP_SIZE  0x400000
@@@ -320,18 -321,7 +320,7 @@@ static struct platform_driver xxs1500_p
        .remove         = __devexit_p(xxs1500_pcmcia_remove),
  };
  
- int __init xxs1500_pcmcia_socket_load(void)
- {
-       return platform_driver_register(&xxs1500_pcmcia_socket_driver);
- }
- void  __exit xxs1500_pcmcia_socket_unload(void)
- {
-       platform_driver_unregister(&xxs1500_pcmcia_socket_driver);
- }
- module_init(xxs1500_pcmcia_socket_load);
- module_exit(xxs1500_pcmcia_socket_unload);
+ module_platform_driver(xxs1500_pcmcia_socket_driver);
  
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("PCMCIA Socket Services for MyCable XXS1500 systems");