PCMCIA: pxa: convert PXA socket drivers to use new irq/gpio management
[linux-2.6.git] / drivers / pcmcia / pxa2xx_viper.c
index 1064b1c..6100ef8 100644 (file)
 
 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;
@@ -49,38 +42,28 @@ static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
        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;
 }
@@ -92,21 +75,12 @@ static void viper_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
        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;