Commit e27af7edda008d225ad542c3b6645483683a7e91
Committed by
Eric Miao
1 parent
235a175c40
Exists in
master
and in
4 other branches
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, |