Commit e27af7edda008d225ad542c3b6645483683a7e91

Authored by Marek Vasut
Committed by Eric Miao
1 parent 235a175c40

ARM: pxa: Use gpio arrays in vpac270_pcmcia driver

Use gpio_request_array() / gpio_free_array(), this makes the code
cleaner and less error prone.

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>

Showing 1 changed file with 29 additions and 78 deletions Side-by-side Diff

drivers/pcmcia/pxa2xx_vpac270.c
... ... @@ -22,6 +22,19 @@
22 22  
23 23 #include "soc_common.h"
24 24  
  25 +static struct gpio vpac270_pcmcia_gpios[] = {
  26 + { GPIO84_VPAC270_PCMCIA_CD, GPIOF_IN, "PCMCIA Card Detect" },
  27 + { GPIO35_VPAC270_PCMCIA_RDY, GPIOF_IN, "PCMCIA Ready" },
  28 + { GPIO107_VPAC270_PCMCIA_PPEN, GPIOF_INIT_LOW, "PCMCIA PPEN" },
  29 + { GPIO11_VPAC270_PCMCIA_RESET, GPIOF_INIT_LOW, "PCMCIA Reset" },
  30 +};
  31 +
  32 +static struct gpio vpac270_cf_gpios[] = {
  33 + { GPIO17_VPAC270_CF_CD, GPIOF_IN, "CF Card Detect" },
  34 + { GPIO12_VPAC270_CF_RDY, GPIOF_IN, "CF Ready" },
  35 + { GPIO16_VPAC270_CF_RESET, GPIOF_INIT_LOW, "CF Reset" },
  36 +};
  37 +
25 38 static struct pcmcia_irqs cd_irqs[] = {
26 39 {
27 40 .sock = 0,
28 41  
29 42  
30 43  
31 44  
32 45  
33 46  
34 47  
... ... @@ -40,96 +53,34 @@
40 53 int ret;
41 54  
42 55 if (skt->nr == 0) {
43   - ret = gpio_request(GPIO84_VPAC270_PCMCIA_CD, "PCMCIA CD");
44   - if (ret)
45   - goto err1;
46   - ret = gpio_direction_input(GPIO84_VPAC270_PCMCIA_CD);
47   - if (ret)
48   - goto err2;
  56 + ret = gpio_request_array(vpac270_pcmcia_gpios,
  57 + ARRAY_SIZE(vpac270_pcmcia_gpios));
49 58  
50   - ret = gpio_request(GPIO35_VPAC270_PCMCIA_RDY, "PCMCIA RDY");
51   - if (ret)
52   - goto err2;
53   - ret = gpio_direction_input(GPIO35_VPAC270_PCMCIA_RDY);
54   - if (ret)
55   - goto err3;
56   -
57   - ret = gpio_request(GPIO107_VPAC270_PCMCIA_PPEN, "PCMCIA PPEN");
58   - if (ret)
59   - goto err3;
60   - ret = gpio_direction_output(GPIO107_VPAC270_PCMCIA_PPEN, 0);
61   - if (ret)
62   - goto err4;
63   -
64   - ret = gpio_request(GPIO11_VPAC270_PCMCIA_RESET, "PCMCIA RESET");
65   - if (ret)
66   - goto err4;
67   - ret = gpio_direction_output(GPIO11_VPAC270_PCMCIA_RESET, 0);
68   - if (ret)
69   - goto err5;
70   -
71 59 skt->socket.pci_irq = gpio_to_irq(GPIO35_VPAC270_PCMCIA_RDY);
72 60  
73   - return soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1);
74   -
75   -err5:
76   - gpio_free(GPIO11_VPAC270_PCMCIA_RESET);
77   -err4:
78   - gpio_free(GPIO107_VPAC270_PCMCIA_PPEN);
79   -err3:
80   - gpio_free(GPIO35_VPAC270_PCMCIA_RDY);
81   -err2:
82   - gpio_free(GPIO84_VPAC270_PCMCIA_CD);
83   -err1:
84   - return ret;
85   -
  61 + if (!ret)
  62 + ret = soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1);
86 63 } else {
87   - ret = gpio_request(GPIO17_VPAC270_CF_CD, "CF CD");
88   - if (ret)
89   - goto err6;
90   - ret = gpio_direction_input(GPIO17_VPAC270_CF_CD);
91   - if (ret)
92   - goto err7;
  64 + ret = gpio_request_array(vpac270_cf_gpios,
  65 + ARRAY_SIZE(vpac270_cf_gpios));
93 66  
94   - ret = gpio_request(GPIO12_VPAC270_CF_RDY, "CF RDY");
95   - if (ret)
96   - goto err7;
97   - ret = gpio_direction_input(GPIO12_VPAC270_CF_RDY);
98   - if (ret)
99   - goto err8;
100   -
101   - ret = gpio_request(GPIO16_VPAC270_CF_RESET, "CF RESET");
102   - if (ret)
103   - goto err8;
104   - ret = gpio_direction_output(GPIO16_VPAC270_CF_RESET, 0);
105   - if (ret)
106   - goto err9;
107   -
108 67 skt->socket.pci_irq = gpio_to_irq(GPIO12_VPAC270_CF_RDY);
109 68  
110   - return soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1);
111   -
112   -err9:
113   - gpio_free(GPIO16_VPAC270_CF_RESET);
114   -err8:
115   - gpio_free(GPIO12_VPAC270_CF_RDY);
116   -err7:
117   - gpio_free(GPIO17_VPAC270_CF_CD);
118   -err6:
119   - return ret;
120   -
  69 + if (!ret)
  70 + ret = soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1);
121 71 }
  72 +
  73 + return ret;
122 74 }
123 75  
124 76 static void vpac270_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
125 77 {
126   - gpio_free(GPIO11_VPAC270_PCMCIA_RESET);
127   - gpio_free(GPIO107_VPAC270_PCMCIA_PPEN);
128   - gpio_free(GPIO35_VPAC270_PCMCIA_RDY);
129   - gpio_free(GPIO84_VPAC270_PCMCIA_CD);
130   - gpio_free(GPIO16_VPAC270_CF_RESET);
131   - gpio_free(GPIO12_VPAC270_CF_RDY);
132   - gpio_free(GPIO17_VPAC270_CF_CD);
  78 + if (skt->nr == 0)
  79 + gpio_request_array(vpac270_pcmcia_gpios,
  80 + ARRAY_SIZE(vpac270_pcmcia_gpios));
  81 + else
  82 + gpio_request_array(vpac270_cf_gpios,
  83 + ARRAY_SIZE(vpac270_cf_gpios));
133 84 }
134 85  
135 86 static void vpac270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,