]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/pcmcia/pxa2xx_cm_x255.c
PCMCIA: pxa: convert PXA socket drivers to use new irq/gpio management
[mirror_ubuntu-bionic-kernel.git] / drivers / pcmcia / pxa2xx_cm_x255.c
index 31ab6ddf52c932c1791e87a874a2c6ace211e073..f90e7b1a59586e386b7a62c183c972a1cd772165 100644 (file)
 #define GPIO_PCMCIA_S1_RDYINT  (8)
 #define GPIO_PCMCIA_RESET      (9)
 
-#define PCMCIA_S0_CD_VALID     gpio_to_irq(GPIO_PCMCIA_S0_CD_VALID)
-#define PCMCIA_S1_CD_VALID     gpio_to_irq(GPIO_PCMCIA_S1_CD_VALID)
-#define PCMCIA_S0_RDYINT       gpio_to_irq(GPIO_PCMCIA_S0_RDYINT)
-#define PCMCIA_S1_RDYINT       gpio_to_irq(GPIO_PCMCIA_S1_RDYINT)
-
-
-static struct pcmcia_irqs irqs[] = {
-       { .sock = 0, .str = "PCMCIA0 CD" },
-       { .sock = 1, .str = "PCMCIA1 CD" },
-};
-
 static int cmx255_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
        int ret = gpio_request(GPIO_PCMCIA_RESET, "PCCard reset");
@@ -43,19 +32,23 @@ static int cmx255_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                return ret;
        gpio_direction_output(GPIO_PCMCIA_RESET, 0);
 
-       skt->socket.pci_irq = skt->nr == 0 ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT;
-       irqs[0].irq = PCMCIA_S0_CD_VALID;
-       irqs[1].irq = PCMCIA_S1_CD_VALID;
-       ret = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
-       if (!ret)
-               gpio_free(GPIO_PCMCIA_RESET);
+       if (skt->nr == 0) {
+               skt->stat[SOC_STAT_CD].gpio = GPIO_PCMCIA_S0_CD_VALID;
+               skt->stat[SOC_STAT_CD].name = "PCMCIA0 CD";
+               skt->stat[SOC_STAT_RDY].gpio = GPIO_PCMCIA_S0_RDYINT;
+               skt->stat[SOC_STAT_RDY].name = "PCMCIA0 RDY";
+       } else {
+               skt->stat[SOC_STAT_CD].gpio = GPIO_PCMCIA_S1_CD_VALID;
+               skt->stat[SOC_STAT_CD].name = "PCMCIA1 CD";
+               skt->stat[SOC_STAT_RDY].gpio = GPIO_PCMCIA_S1_RDYINT;
+               skt->stat[SOC_STAT_RDY].name = "PCMCIA1 RDY";
+       }
 
-       return ret;
+       return 0;
 }
 
 static void cmx255_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
 {
-       soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
        gpio_free(GPIO_PCMCIA_RESET);
 }
 
@@ -63,13 +56,6 @@ static void cmx255_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
 static void cmx255_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
                                       struct pcmcia_state *state)
 {
-       int cd = skt->nr ? GPIO_PCMCIA_S1_CD_VALID : GPIO_PCMCIA_S0_CD_VALID;
-       int rdy = skt->nr ? GPIO_PCMCIA_S1_RDYINT : GPIO_PCMCIA_S0_RDYINT;
-
-       state->detect = !gpio_get_value(cd);
-       state->ready  = !!gpio_get_value(rdy);
-       state->bvd1   = 1;
-       state->bvd2   = 1;
        state->vs_3v  = 0;
        state->vs_Xv  = 0;
        state->wrprot = 0;  /* not available */