aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorIgor Grinberg <grinberg@compulab.co.il>2011-05-03 11:22:09 -0400
committerTony Lindgren <tony@atomide.com>2011-05-12 05:52:06 -0400
commitbc593f5d787d0a015539e21868302fb44a47c3e3 (patch)
tree75feac78712ae08e38b678c0dae62cb75765ddb0 /arch/arm
parent9e18630b689d658d65bf59508bfec084f61ff5c6 (diff)
arm: omap2plus: GPIO cleanup
use gpio_request_<one|array>() instead of multiple gpiolib calls, remove unneeded variables, etc. Signed-off-by: Igor Grinberg <grinberg@compulab.co.il> Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-omap2/board-2430sdp.c7
-rw-r--r--arch/arm/mach-omap2/board-3430sdp.c47
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c98
-rw-r--r--arch/arm/mach-omap2/board-am3517crane.c10
-rw-r--r--arch/arm/mach-omap2/board-am3517evm.c54
-rw-r--r--arch/arm/mach-omap2/board-apollon.c29
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c74
-rw-r--r--arch/arm/mach-omap2/board-cm-t3517.c9
-rw-r--r--arch/arm/mach-omap2/board-devkit8000.c12
-rw-r--r--arch/arm/mach-omap2/board-igep0020.c143
-rw-r--r--arch/arm/mach-omap2/board-igep0030.c93
-rw-r--r--arch/arm/mach-omap2/board-n8x0.c28
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c128
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c99
-rw-r--r--arch/arm/mach-omap2/board-omap3pandora.c21
-rw-r--r--arch/arm/mach-omap2/board-omap3stalker.c7
-rw-r--r--arch/arm/mach-omap2/board-omap3touchbook.c20
-rw-r--r--arch/arm/mach-omap2/board-omap4panda.c62
-rw-r--r--arch/arm/mach-omap2/board-overo.c55
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c29
-rw-r--r--arch/arm/mach-omap2/board-rx51-video.c5
-rw-r--r--arch/arm/mach-omap2/board-zoom-debugboard.c9
-rw-r--r--arch/arm/mach-omap2/board-zoom-display.c31
-rw-r--r--arch/arm/mach-omap2/board-zoom-peripherals.c8
-rw-r--r--arch/arm/mach-omap2/gpmc-smc91x.c11
-rw-r--r--arch/arm/mach-omap2/gpmc-smsc911x.c7
-rw-r--r--arch/arm/mach-omap2/usb-tusb6010.c3
27 files changed, 398 insertions, 701 deletions
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c
index a8810f83a573..d54969be0a54 100644
--- a/arch/arm/mach-omap2/board-2430sdp.c
+++ b/arch/arm/mach-omap2/board-2430sdp.c
@@ -226,8 +226,6 @@ static struct omap_board_mux board_mux[] __initdata = {
226 226
227static void __init omap_2430sdp_init(void) 227static void __init omap_2430sdp_init(void)
228{ 228{
229 int ret;
230
231 omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC); 229 omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
232 230
233 omap_board_config = sdp2430_config; 231 omap_board_config = sdp2430_config;
@@ -246,9 +244,8 @@ static void __init omap_2430sdp_init(void)
246 board_smc91x_init(); 244 board_smc91x_init();
247 245
248 /* Turn off secondary LCD backlight */ 246 /* Turn off secondary LCD backlight */
249 ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight"); 247 gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
250 if (ret == 0) 248 "Secondary LCD backlight");
251 gpio_direction_output(SECONDARY_LCD_GPIO, 0);
252} 249}
253 250
254static void __init omap_2430sdp_map_io(void) 251static void __init omap_2430sdp_map_io(void)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 951e5857ad31..99218a5299ca 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -126,8 +126,11 @@ static struct twl4030_keypad_data sdp3430_kp_data = {
126#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8 126#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
127#define SDP3430_LCD_PANEL_ENABLE_GPIO 5 127#define SDP3430_LCD_PANEL_ENABLE_GPIO 5
128 128
129static unsigned backlight_gpio; 129static struct gpio sdp3430_dss_gpios[] __initdata = {
130static unsigned enable_gpio; 130 {SDP3430_LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, "LCD reset" },
131 {SDP3430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, "LCD Backlight"},
132};
133
131static int lcd_enabled; 134static int lcd_enabled;
132static int dvi_enabled; 135static int dvi_enabled;
133 136
@@ -135,29 +138,11 @@ static void __init sdp3430_display_init(void)
135{ 138{
136 int r; 139 int r;
137 140
138 enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO; 141 r = gpio_request_array(sdp3430_dss_gpios,
139 backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO; 142 ARRAY_SIZE(sdp3430_dss_gpios));
140 143 if (r)
141 r = gpio_request(enable_gpio, "LCD reset"); 144 printk(KERN_ERR "failed to get LCD control GPIOs\n");
142 if (r) {
143 printk(KERN_ERR "failed to get LCD reset GPIO\n");
144 goto err0;
145 }
146
147 r = gpio_request(backlight_gpio, "LCD Backlight");
148 if (r) {
149 printk(KERN_ERR "failed to get LCD backlight GPIO\n");
150 goto err1;
151 }
152
153 gpio_direction_output(enable_gpio, 0);
154 gpio_direction_output(backlight_gpio, 0);
155 145
156 return;
157err1:
158 gpio_free(enable_gpio);
159err0:
160 return;
161} 146}
162 147
163static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev) 148static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
@@ -167,8 +152,8 @@ static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
167 return -EINVAL; 152 return -EINVAL;
168 } 153 }
169 154
170 gpio_direction_output(enable_gpio, 1); 155 gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1);
171 gpio_direction_output(backlight_gpio, 1); 156 gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1);
172 157
173 lcd_enabled = 1; 158 lcd_enabled = 1;
174 159
@@ -179,8 +164,8 @@ static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
179{ 164{
180 lcd_enabled = 0; 165 lcd_enabled = 0;
181 166
182 gpio_direction_output(enable_gpio, 0); 167 gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0);
183 gpio_direction_output(backlight_gpio, 0); 168 gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0);
184} 169}
185 170
186static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev) 171static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
@@ -308,12 +293,10 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
308 omap2_hsmmc_init(mmc); 293 omap2_hsmmc_init(mmc);
309 294
310 /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ 295 /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
311 gpio_request(gpio + 7, "sub_lcd_en_bkl"); 296 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
312 gpio_direction_output(gpio + 7, 0);
313 297
314 /* gpio + 15 is "sub_lcd_nRST" (output) */ 298 /* gpio + 15 is "sub_lcd_nRST" (output) */
315 gpio_request(gpio + 15, "sub_lcd_nRST"); 299 gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST");
316 gpio_direction_output(gpio + 15, 0);
317 300
318 return 0; 301 return 0;
319} 302}
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 707354222d4c..ae3153c5396d 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -252,58 +252,22 @@ static struct spi_board_info sdp4430_spi_board_info[] __initdata = {
252 }, 252 },
253}; 253};
254 254
255static struct gpio sdp4430_eth_gpios[] __initdata = {
256 { ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },
257 { ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },
258 { ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
259};
260
255static int omap_ethernet_init(void) 261static int omap_ethernet_init(void)
256{ 262{
257 int status; 263 int status;
258 264
259 /* Request of GPIO lines */ 265 /* Request of GPIO lines */
266 status = gpio_request_array(sdp4430_eth_gpios,
267 ARRAY_SIZE(sdp4430_eth_gpios));
268 if (status)
269 pr_err("Cannot request ETH GPIOs\n");
260 270
261 status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
262 if (status) {
263 pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
264 return status;
265 }
266
267 status = gpio_request(ETH_KS8851_QUART, "quart");
268 if (status) {
269 pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
270 goto error1;
271 }
272
273 status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
274 if (status) {
275 pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
276 goto error2;
277 }
278
279 /* Configuration of requested GPIO lines */
280
281 status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
282 if (status) {
283 pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
284 goto error3;
285 }
286
287 status = gpio_direction_output(ETH_KS8851_QUART, 1);
288 if (status) {
289 pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
290 goto error3;
291 }
292
293 status = gpio_direction_input(ETH_KS8851_IRQ);
294 if (status) {
295 pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
296 goto error3;
297 }
298
299 return 0;
300
301error3:
302 gpio_free(ETH_KS8851_IRQ);
303error2:
304 gpio_free(ETH_KS8851_QUART);
305error1:
306 gpio_free(ETH_KS8851_POWER_ON);
307 return status; 271 return status;
308} 272}
309 273
@@ -602,21 +566,13 @@ static int __init omap4_i2c_init(void)
602 566
603static void __init omap_sfh7741prox_init(void) 567static void __init omap_sfh7741prox_init(void)
604{ 568{
605 int error; 569 int error;
606 570
607 error = gpio_request(OMAP4_SFH7741_ENABLE_GPIO, "sfh7741"); 571 error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,
608 if (error < 0) { 572 GPIOF_OUT_INIT_LOW, "sfh7741");
573 if (error < 0)
609 pr_err("%s:failed to request GPIO %d, error %d\n", 574 pr_err("%s:failed to request GPIO %d, error %d\n",
610 __func__, OMAP4_SFH7741_ENABLE_GPIO, error); 575 __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
611 return;
612 }
613
614 error = gpio_direction_output(OMAP4_SFH7741_ENABLE_GPIO , 0);
615 if (error < 0) {
616 pr_err("%s: GPIO configuration failed: GPIO %d,error %d\n",
617 __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
618 gpio_free(OMAP4_SFH7741_ENABLE_GPIO);
619 }
620} 576}
621 577
622static void sdp4430_hdmi_mux_init(void) 578static void sdp4430_hdmi_mux_init(void)
@@ -633,27 +589,19 @@ static void sdp4430_hdmi_mux_init(void)
633 OMAP_PIN_INPUT_PULLUP); 589 OMAP_PIN_INPUT_PULLUP);
634} 590}
635 591
592static struct gpio sdp4430_hdmi_gpios[] = {
593 { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
594 { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
595};
596
636static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev) 597static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
637{ 598{
638 int status; 599 int status;
639 600
640 status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, 601 status = gpio_request_array(sdp4430_hdmi_gpios,
641 "hdmi_gpio_hpd"); 602 ARRAY_SIZE(sdp4430_hdmi_gpios));
642 if (status) { 603 if (status)
643 pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD); 604 pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
644 return status;
645 }
646 status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
647 "hdmi_gpio_ls_oe");
648 if (status) {
649 pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
650 goto error1;
651 }
652
653 return 0;
654
655error1:
656 gpio_free(HDMI_GPIO_HPD);
657 605
658 return status; 606 return status;
659} 607}
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
index a890d244fec6..5e438a77cd72 100644
--- a/arch/arm/mach-omap2/board-am3517crane.c
+++ b/arch/arm/mach-omap2/board-am3517crane.c
@@ -89,19 +89,13 @@ static void __init am3517_crane_init(void)
89 return; 89 return;
90 } 90 }
91 91
92 ret = gpio_request(GPIO_USB_POWER, "usb_ehci_enable"); 92 ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
93 "usb_ehci_enable");
93 if (ret < 0) { 94 if (ret < 0) {
94 pr_err("Can not request GPIO %d\n", GPIO_USB_POWER); 95 pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
95 return; 96 return;
96 } 97 }
97 98
98 ret = gpio_direction_output(GPIO_USB_POWER, 1);
99 if (ret < 0) {
100 gpio_free(GPIO_USB_POWER);
101 pr_err("Unable to initialize EHCI power\n");
102 return;
103 }
104
105 usbhs_init(&usbhs_bdata); 99 usbhs_init(&usbhs_bdata);
106} 100}
107 101
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index ce7d5e6e4150..6c4706038808 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -174,19 +174,14 @@ static void __init am3517_evm_rtc_init(void)
174 int r; 174 int r;
175 175
176 omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP); 176 omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP);
177 r = gpio_request(GPIO_RTCS35390A_IRQ, "rtcs35390a-irq"); 177
178 r = gpio_request_one(GPIO_RTCS35390A_IRQ, GPIOF_IN, "rtcs35390a-irq");
178 if (r < 0) { 179 if (r < 0) {
179 printk(KERN_WARNING "failed to request GPIO#%d\n", 180 printk(KERN_WARNING "failed to request GPIO#%d\n",
180 GPIO_RTCS35390A_IRQ); 181 GPIO_RTCS35390A_IRQ);
181 return; 182 return;
182 } 183 }
183 r = gpio_direction_input(GPIO_RTCS35390A_IRQ); 184
184 if (r < 0) {
185 printk(KERN_WARNING "GPIO#%d cannot be configured as input\n",
186 GPIO_RTCS35390A_IRQ);
187 gpio_free(GPIO_RTCS35390A_IRQ);
188 return;
189 }
190 am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ); 185 am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ);
191} 186}
192 187
@@ -242,6 +237,15 @@ static int dvi_enabled;
242 237
243#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ 238#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
244 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE) 239 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
240static struct gpio am3517_evm_dss_gpios[] __initdata = {
241 /* GPIO 182 = LCD Backlight Power */
242 { LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" },
243 /* GPIO 181 = LCD Panel PWM */
244 { LCD_PANEL_PWM, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
245 /* GPIO 176 = LCD Panel Power enable pin */
246 { LCD_PANEL_PWR, GPIOF_OUT_INIT_HIGH, "dvi enable" },
247};
248
245static void __init am3517_evm_display_init(void) 249static void __init am3517_evm_display_init(void)
246{ 250{
247 int r; 251 int r;
@@ -249,41 +253,15 @@ static void __init am3517_evm_display_init(void)
249 omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP); 253 omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP);
250 omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN); 254 omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN);
251 omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN); 255 omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN);
252 /* 256
253 * Enable GPIO 182 = LCD Backlight Power 257 r = gpio_request_array(am3517_evm_dss_gpios,
254 */ 258 ARRAY_SIZE(am3517_evm_dss_gpios));
255 r = gpio_request(LCD_PANEL_BKLIGHT_PWR, "lcd_backlight_pwr");
256 if (r) { 259 if (r) {
257 printk(KERN_ERR "failed to get lcd_backlight_pwr\n"); 260 printk(KERN_ERR "failed to get DSS panel control GPIOs\n");
258 return; 261 return;
259 } 262 }
260 gpio_direction_output(LCD_PANEL_BKLIGHT_PWR, 1);
261 /*
262 * Enable GPIO 181 = LCD Panel PWM
263 */
264 r = gpio_request(LCD_PANEL_PWM, "lcd_pwm");
265 if (r) {
266 printk(KERN_ERR "failed to get lcd_pwm\n");
267 goto err_1;
268 }
269 gpio_direction_output(LCD_PANEL_PWM, 1);
270 /*
271 * Enable GPIO 176 = LCD Panel Power enable pin
272 */
273 r = gpio_request(LCD_PANEL_PWR, "lcd_panel_pwr");
274 if (r) {
275 printk(KERN_ERR "failed to get lcd_panel_pwr\n");
276 goto err_2;
277 }
278 gpio_direction_output(LCD_PANEL_PWR, 1);
279 263
280 printk(KERN_INFO "Display initialized successfully\n"); 264 printk(KERN_INFO "Display initialized successfully\n");
281 return;
282
283err_2:
284 gpio_free(LCD_PANEL_PWM);
285err_1:
286 gpio_free(LCD_PANEL_BKLIGHT_PWR);
287} 265}
288#else 266#else
289static void __init am3517_evm_display_init(void) {} 267static void __init am3517_evm_display_init(void) {}
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
index f4f8374a0298..f3beb8eeef77 100644
--- a/arch/arm/mach-omap2/board-apollon.c
+++ b/arch/arm/mach-omap2/board-apollon.c
@@ -202,6 +202,7 @@ static inline void __init apollon_init_smc91x(void)
202 unsigned int rate; 202 unsigned int rate;
203 struct clk *gpmc_fck; 203 struct clk *gpmc_fck;
204 int eth_cs; 204 int eth_cs;
205 int err;
205 206
206 gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */ 207 gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
207 if (IS_ERR(gpmc_fck)) { 208 if (IS_ERR(gpmc_fck)) {
@@ -245,15 +246,13 @@ static inline void __init apollon_init_smc91x(void)
245 apollon_smc91x_resources[0].end = base + 0x30f; 246 apollon_smc91x_resources[0].end = base + 0x30f;
246 udelay(100); 247 udelay(100);
247 248
248 omap_mux_init_gpio(74, 0); 249 omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0);
249 if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) { 250 err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq");
251 if (err) {
250 printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n", 252 printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
251 APOLLON_ETHR_GPIO_IRQ); 253 APOLLON_ETHR_GPIO_IRQ);
252 gpmc_cs_free(APOLLON_ETH_CS); 254 gpmc_cs_free(APOLLON_ETH_CS);
253 goto out;
254 } 255 }
255 gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
256
257out: 256out:
258 clk_disable(gpmc_fck); 257 clk_disable(gpmc_fck);
259 clk_put(gpmc_fck); 258 clk_put(gpmc_fck);
@@ -280,20 +279,19 @@ static void __init omap_apollon_init_early(void)
280 omap2_init_common_devices(NULL, NULL); 279 omap2_init_common_devices(NULL, NULL);
281} 280}
282 281
282static struct gpio apollon_gpio_leds[] __initdata = {
283 { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
284 { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
285 { LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4 */
286};
287
283static void __init apollon_led_init(void) 288static void __init apollon_led_init(void)
284{ 289{
285 /* LED0 - AA10 */
286 omap_mux_init_signal("vlynq_clk.gpio_13", 0); 290 omap_mux_init_signal("vlynq_clk.gpio_13", 0);
287 gpio_request(LED0_GPIO13, "LED0");
288 gpio_direction_output(LED0_GPIO13, 0);
289 /* LED1 - AA6 */
290 omap_mux_init_signal("vlynq_rx1.gpio_14", 0); 291 omap_mux_init_signal("vlynq_rx1.gpio_14", 0);
291 gpio_request(LED1_GPIO14, "LED1");
292 gpio_direction_output(LED1_GPIO14, 0);
293 /* LED2 - AA4 */
294 omap_mux_init_signal("vlynq_rx0.gpio_15", 0); 292 omap_mux_init_signal("vlynq_rx0.gpio_15", 0);
295 gpio_request(LED2_GPIO15, "LED2"); 293
296 gpio_direction_output(LED2_GPIO15, 0); 294 gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));
297} 295}
298 296
299static void __init apollon_usb_init(void) 297static void __init apollon_usb_init(void)
@@ -301,8 +299,7 @@ static void __init apollon_usb_init(void)
301 /* USB device */ 299 /* USB device */
302 /* DEVICE_SUSPEND */ 300 /* DEVICE_SUSPEND */
303 omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); 301 omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0);
304 gpio_request(12, "USB suspend"); 302 gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend");
305 gpio_direction_output(12, 0);
306 omap2_usbfs_init(&apollon_usb_config); 303 omap2_usbfs_init(&apollon_usb_config);
307} 304}
308 305
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index e0e2d4838003..6063be82b563 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -182,10 +182,6 @@ static inline void cm_t35_init_nand(void) {}
182#define CM_T35_LCD_BL_GPIO 58 182#define CM_T35_LCD_BL_GPIO 58
183#define CM_T35_DVI_EN_GPIO 54 183#define CM_T35_DVI_EN_GPIO 54
184 184
185static int lcd_bl_gpio;
186static int lcd_en_gpio;
187static int dvi_en_gpio;
188
189static int lcd_enabled; 185static int lcd_enabled;
190static int dvi_enabled; 186static int dvi_enabled;
191 187
@@ -196,8 +192,8 @@ static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
196 return -EINVAL; 192 return -EINVAL;
197 } 193 }
198 194
199 gpio_set_value(lcd_en_gpio, 1); 195 gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
200 gpio_set_value(lcd_bl_gpio, 1); 196 gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
201 197
202 lcd_enabled = 1; 198 lcd_enabled = 1;
203 199
@@ -208,8 +204,8 @@ static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
208{ 204{
209 lcd_enabled = 0; 205 lcd_enabled = 0;
210 206
211 gpio_set_value(lcd_bl_gpio, 0); 207 gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
212 gpio_set_value(lcd_en_gpio, 0); 208 gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
213} 209}
214 210
215static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev) 211static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
@@ -219,7 +215,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
219 return -EINVAL; 215 return -EINVAL;
220 } 216 }
221 217
222 gpio_set_value(dvi_en_gpio, 0); 218 gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
223 dvi_enabled = 1; 219 dvi_enabled = 1;
224 220
225 return 0; 221 return 0;
@@ -227,7 +223,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
227 223
228static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev) 224static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
229{ 225{
230 gpio_set_value(dvi_en_gpio, 1); 226 gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
231 dvi_enabled = 0; 227 dvi_enabled = 0;
232} 228}
233 229
@@ -309,62 +305,38 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
309 }, 305 },
310}; 306};
311 307
308static struct gpio cm_t35_dss_gpios[] __initdata = {
309 { CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
310 { CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
311 { CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
312};
313
312static void __init cm_t35_init_display(void) 314static void __init cm_t35_init_display(void)
313{ 315{
314 int err; 316 int err;
315 317
316 lcd_en_gpio = CM_T35_LCD_EN_GPIO;
317 lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
318 dvi_en_gpio = CM_T35_DVI_EN_GPIO;
319
320 spi_register_board_info(cm_t35_lcd_spi_board_info, 318 spi_register_board_info(cm_t35_lcd_spi_board_info,
321 ARRAY_SIZE(cm_t35_lcd_spi_board_info)); 319 ARRAY_SIZE(cm_t35_lcd_spi_board_info));
322 320
323 err = gpio_request(lcd_en_gpio, "LCD RST"); 321 err = gpio_request_array(cm_t35_dss_gpios,
324 if (err) { 322 ARRAY_SIZE(cm_t35_dss_gpios));
325 pr_err("CM-T35: failed to get LCD reset GPIO\n");
326 goto out;
327 }
328
329 err = gpio_request(lcd_bl_gpio, "LCD BL");
330 if (err) { 323 if (err) {
331 pr_err("CM-T35: failed to get LCD backlight control GPIO\n"); 324 pr_err("CM-T35: failed to request DSS control GPIOs\n");
332 goto err_lcd_bl; 325 return;
333 } 326 }
334 327
335 err = gpio_request(dvi_en_gpio, "DVI EN"); 328 gpio_export(CM_T35_LCD_EN_GPIO, 0);
336 if (err) { 329 gpio_export(CM_T35_LCD_BL_GPIO, 0);
337 pr_err("CM-T35: failed to get DVI reset GPIO\n"); 330 gpio_export(CM_T35_DVI_EN_GPIO, 0);
338 goto err_dvi_en;
339 }
340
341 gpio_export(lcd_en_gpio, 0);
342 gpio_export(lcd_bl_gpio, 0);
343 gpio_export(dvi_en_gpio, 0);
344 gpio_direction_output(lcd_en_gpio, 0);
345 gpio_direction_output(lcd_bl_gpio, 0);
346 gpio_direction_output(dvi_en_gpio, 1);
347 331
348 msleep(50); 332 msleep(50);
349 gpio_set_value(lcd_en_gpio, 1); 333 gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
350 334
351 err = omap_display_init(&cm_t35_dss_data); 335 err = omap_display_init(&cm_t35_dss_data);
352 if (err) { 336 if (err) {
353 pr_err("CM-T35: failed to register DSS device\n"); 337 pr_err("CM-T35: failed to register DSS device\n");
354 goto err_dev_reg; 338 gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
355 } 339 }
356
357 return;
358
359err_dev_reg:
360 gpio_free(dvi_en_gpio);
361err_dvi_en:
362 gpio_free(lcd_bl_gpio);
363err_lcd_bl:
364 gpio_free(lcd_en_gpio);
365out:
366
367 return;
368} 340}
369 341
370static struct regulator_consumer_supply cm_t35_vmmc1_supply = { 342static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
@@ -497,10 +469,8 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
497{ 469{
498 int wlan_rst = gpio + 2; 470 int wlan_rst = gpio + 2;
499 471
500 if ((gpio_request(wlan_rst, "WLAN RST") == 0) && 472 if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
501 (gpio_direction_output(wlan_rst, 1) == 0)) {
502 gpio_export(wlan_rst, 0); 473 gpio_export(wlan_rst, 0);
503
504 udelay(10); 474 udelay(10);
505 gpio_set_value(wlan_rst, 0); 475 gpio_set_value(wlan_rst, 0);
506 udelay(10); 476 udelay(10);
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
index a27e3eee8292..08f08e812492 100644
--- a/arch/arm/mach-omap2/board-cm-t3517.c
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -148,14 +148,13 @@ static void __init cm_t3517_init_rtc(void)
148{ 148{
149 int err; 149 int err;
150 150
151 err = gpio_request(RTC_CS_EN_GPIO, "rtc cs en"); 151 err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,
152 "rtc cs en");
152 if (err) { 153 if (err) {
153 pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err); 154 pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);
154 return; 155 return;
155 } 156 }
156 157
157 gpio_direction_output(RTC_CS_EN_GPIO, 1);
158
159 platform_device_register(&cm_t3517_rtc_device); 158 platform_device_register(&cm_t3517_rtc_device);
160} 159}
161#else 160#else
@@ -182,11 +181,11 @@ static int cm_t3517_init_usbh(void)
182{ 181{
183 int err; 182 int err;
184 183
185 err = gpio_request(USB_HUB_RESET_GPIO, "usb hub rst"); 184 err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,
185 "usb hub rst");
186 if (err) { 186 if (err) {
187 pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err); 187 pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);
188 } else { 188 } else {
189 gpio_direction_output(USB_HUB_RESET_GPIO, 0);
190 udelay(10); 189 udelay(10);
191 gpio_set_value(USB_HUB_RESET_GPIO, 1); 190 gpio_set_value(USB_HUB_RESET_GPIO, 1);
192 msleep(1); 191 msleep(1);
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 405542af6caa..3bd344a527e2 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -242,7 +242,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
242 /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */ 242 /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
243 devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0; 243 devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
244 ret = gpio_request_one(devkit8000_lcd_device.reset_gpio, 244 ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
245 GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN"); 245 GPIOF_OUT_INIT_LOW, "LCD_PWREN");
246 if (ret < 0) { 246 if (ret < 0) {
247 devkit8000_lcd_device.reset_gpio = -EINVAL; 247 devkit8000_lcd_device.reset_gpio = -EINVAL;
248 printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n"); 248 printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
@@ -251,7 +251,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
251 /* gpio + 7 is "DVI_PD" (out, active low) */ 251 /* gpio + 7 is "DVI_PD" (out, active low) */
252 devkit8000_dvi_device.reset_gpio = gpio + 7; 252 devkit8000_dvi_device.reset_gpio = gpio + 7;
253 ret = gpio_request_one(devkit8000_dvi_device.reset_gpio, 253 ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
254 GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown"); 254 GPIOF_OUT_INIT_LOW, "DVI PowerDown");
255 if (ret < 0) { 255 if (ret < 0) {
256 devkit8000_dvi_device.reset_gpio = -EINVAL; 256 devkit8000_dvi_device.reset_gpio = -EINVAL;
257 printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n"); 257 printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
@@ -483,14 +483,14 @@ static void __init omap_dm9000_init(void)
483{ 483{
484 unsigned char *eth_addr = omap_dm9000_platdata.dev_addr; 484 unsigned char *eth_addr = omap_dm9000_platdata.dev_addr;
485 struct omap_die_id odi; 485 struct omap_die_id odi;
486 int ret;
486 487
487 if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) { 488 ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq");
489 if (ret < 0) {
488 printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n", 490 printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n",
489 OMAP_DM9000_GPIO_IRQ); 491 OMAP_DM9000_GPIO_IRQ);
490 return; 492 return;
491 } 493 }
492
493 gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
494 494
495 /* init the mac address using DIE id */ 495 /* init the mac address using DIE id */
496 omap_get_die_id(&odi); 496 omap_get_die_id(&odi);
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 2c9a9197d2b2..c62c297e0a3d 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -78,22 +78,22 @@ static void __init igep2_get_revision(void)
78 78
79 omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT); 79 omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
80 80
81 if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_HW0_REV") == 0) && 81 if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {
82 (gpio_direction_input(IGEP2_GPIO_LED1_RED) == 0)) {
83 ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
84 if (ret == 0) {
85 pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
86 hwrev = IGEP2_BOARD_HWREV_C;
87 } else if (ret == 1) {
88 pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
89 hwrev = IGEP2_BOARD_HWREV_B;
90 } else {
91 pr_err("IGEP2: Unknown Hardware Revision\n");
92 hwrev = -1;
93 }
94 } else {
95 pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n"); 82 pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
96 pr_err("IGEP2: Unknown Hardware Revision\n"); 83 pr_err("IGEP2: Unknown Hardware Revision\n");
84 return;
85 }
86
87 ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
88 if (ret == 0) {
89 pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
90 hwrev = IGEP2_BOARD_HWREV_C;
91 } else if (ret == 1) {
92 pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
93 hwrev = IGEP2_BOARD_HWREV_B;
94 } else {
95 pr_err("IGEP2: Unknown Hardware Revision\n");
96 hwrev = -1;
97 } 97 }
98 98
99 gpio_free(IGEP2_GPIO_LED1_RED); 99 gpio_free(IGEP2_GPIO_LED1_RED);
@@ -339,32 +339,35 @@ static void __init igep2_leds_init(void)
339} 339}
340 340
341#else 341#else
342static struct gpio igep2_gpio_leds[] __initdata = {
343 { IGEP2_GPIO_LED0_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },
344 { IGEP2_GPIO_LED0_GREEN, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },
345 { IGEP2_GPIO_LED1_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },
346};
347
342static inline void igep2_leds_init(void) 348static inline void igep2_leds_init(void)
343{ 349{
344 if ((gpio_request(IGEP2_GPIO_LED0_RED, "gpio-led:red:d0") == 0) && 350 if (gpio_request_array(igep2_gpio_leds, ARRAY_SIZE(igep2_gpio_leds))) {
345 (gpio_direction_output(IGEP2_GPIO_LED0_RED, 0) == 0)) 351 pr_warning("IGEP v2: Could not obtain leds gpios\n");
346 gpio_export(IGEP2_GPIO_LED0_RED, 0); 352 return;
347 else 353 }
348 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
349
350 if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
351 (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 0) == 0))
352 gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
353 else
354 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
355
356 if ((gpio_request(IGEP2_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
357 (gpio_direction_output(IGEP2_GPIO_LED1_RED, 0) == 0))
358 gpio_export(IGEP2_GPIO_LED1_RED, 0);
359 else
360 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
361 354
355 gpio_export(IGEP2_GPIO_LED0_RED, 0);
356 gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
357 gpio_export(IGEP2_GPIO_LED1_RED, 0);
362} 358}
363#endif 359#endif
364 360
361static struct gpio igep2_twl_gpios[] = {
362 { -EINVAL, GPIOF_IN, "GPIO_EHCI_NOC" },
363 { -EINVAL, GPIOF_OUT_INIT_LOW, "GPIO_USBH_CPEN" },
364};
365
365static int igep2_twl_gpio_setup(struct device *dev, 366static int igep2_twl_gpio_setup(struct device *dev,
366 unsigned gpio, unsigned ngpio) 367 unsigned gpio, unsigned ngpio)
367{ 368{
369 int ret;
370
368 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 371 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
369 mmc[0].gpio_cd = gpio + 0; 372 mmc[0].gpio_cd = gpio + 0;
370 omap2_hsmmc_init(mmc); 373 omap2_hsmmc_init(mmc);
@@ -373,22 +376,20 @@ static int igep2_twl_gpio_setup(struct device *dev,
373 * REVISIT: need ehci-omap hooks for external VBUS 376 * REVISIT: need ehci-omap hooks for external VBUS
374 * power switch and overcurrent detect 377 * power switch and overcurrent detect
375 */ 378 */
376 if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) || 379 igep2_twl_gpios[0].gpio = gpio + 1;
377 (gpio_direction_input(gpio + 1) < 0))
378 pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
379 380
380 /* 381 /* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN (out, active low) */
381 * TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN 382 igep2_twl_gpios[1].gpio = gpio + TWL4030_GPIO_MAX;
382 * (out, active low) 383
383 */ 384 ret = gpio_request_array(igep2_twl_gpios, ARRAY_SIZE(igep2_twl_gpios));
384 if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) || 385 if (ret < 0)
385 (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
386 pr_err("IGEP2: Could not obtain gpio for USBH_CPEN"); 386 pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
387 387
388 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ 388 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
389#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) 389#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
390 if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0) 390 ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
391 && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) 391 "gpio-led:green:d1");
392 if (ret == 0)
392 gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0); 393 gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
393 else 394 else
394 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n"); 395 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n");
@@ -469,8 +470,9 @@ static struct regulator_init_data igep2_vpll2 = {
469 470
470static void __init igep2_display_init(void) 471static void __init igep2_display_init(void)
471{ 472{
472 if (gpio_request(IGEP2_GPIO_DVI_PUP, "GPIO_DVI_PUP") && 473 int err = gpio_request_one(IGEP2_GPIO_DVI_PUP, GPIOF_OUT_INIT_HIGH,
473 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1)) 474 "GPIO_DVI_PUP");
475 if (err)
474 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n"); 476 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
475} 477}
476 478
@@ -577,44 +579,43 @@ static struct omap_board_mux board_mux[] __initdata = {
577#endif 579#endif
578 580
579#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE) 581#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
582static struct gpio igep2_wlan_bt_gpios[] __initdata = {
583 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
584 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
585 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
586};
580 587
581static void __init igep2_wlan_bt_init(void) 588static void __init igep2_wlan_bt_init(void)
582{ 589{
583 unsigned npd, wreset, btreset; 590 int err;
584 591
585 /* GPIO's for WLAN-BT combo depends on hardware revision */ 592 /* GPIO's for WLAN-BT combo depends on hardware revision */
586 if (hwrev == IGEP2_BOARD_HWREV_B) { 593 if (hwrev == IGEP2_BOARD_HWREV_B) {
587 npd = IGEP2_RB_GPIO_WIFI_NPD; 594 igep2_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;
588 wreset = IGEP2_RB_GPIO_WIFI_NRESET; 595 igep2_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;
589 btreset = IGEP2_RB_GPIO_BT_NRESET; 596 igep2_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;
590 } else if (hwrev == IGEP2_BOARD_HWREV_C) { 597 } else if (hwrev == IGEP2_BOARD_HWREV_C) {
591 npd = IGEP2_RC_GPIO_WIFI_NPD; 598 igep2_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;
592 wreset = IGEP2_RC_GPIO_WIFI_NRESET; 599 igep2_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;
593 btreset = IGEP2_RC_GPIO_BT_NRESET; 600 igep2_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;
594 } else 601 } else
595 return; 602 return;
596 603
597 /* Set GPIO's for WLAN-BT combo module */ 604 err = gpio_request_array(igep2_wlan_bt_gpios,
598 if ((gpio_request(npd, "GPIO_WIFI_NPD") == 0) && 605 ARRAY_SIZE(igep2_wlan_bt_gpios));
599 (gpio_direction_output(npd, 1) == 0)) { 606 if (err) {
600 gpio_export(npd, 0); 607 pr_warning("IGEP2: Could not obtain WIFI/BT gpios\n");
601 } else 608 return;
602 pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NPD\n"); 609 }
603 610
604 if ((gpio_request(wreset, "GPIO_WIFI_NRESET") == 0) && 611 gpio_export(igep2_wlan_bt_gpios[0].gpio, 0);
605 (gpio_direction_output(wreset, 1) == 0)) { 612 gpio_export(igep2_wlan_bt_gpios[1].gpio, 0);
606 gpio_export(wreset, 0); 613 gpio_export(igep2_wlan_bt_gpios[2].gpio, 0);
607 gpio_set_value(wreset, 0); 614
608 udelay(10); 615 gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 0);
609 gpio_set_value(wreset, 1); 616 udelay(10);
610 } else 617 gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 1);
611 pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NRESET\n");
612 618
613 if ((gpio_request(btreset, "GPIO_BT_NRESET") == 0) &&
614 (gpio_direction_output(btreset, 1) == 0)) {
615 gpio_export(btreset, 0);
616 } else
617 pr_warning("IGEP2: Could not obtain gpio GPIO_BT_NRESET\n");
618} 619}
619#else 620#else
620static inline void __init igep2_wlan_bt_init(void) { } 621static inline void __init igep2_wlan_bt_init(void) { }
diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c
index 512a7eb9c2da..83f6be2a0dea 100644
--- a/arch/arm/mach-omap2/board-igep0030.c
+++ b/arch/arm/mach-omap2/board-igep0030.c
@@ -269,49 +269,43 @@ static void __init igep3_leds_init(void)
269} 269}
270 270
271#else 271#else
272static struct gpio igep3_gpio_leds[] __initdata = {
273 { IGEP3_GPIO_LED0_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d0" },
274 { IGEP3_GPIO_LED0_GREEN, GPIOF_OUT_INIT_HIGH, "gpio-led:green:d0" },
275 { IGEP3_GPIO_LED1_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d1" },
276};
277
272static inline void igep3_leds_init(void) 278static inline void igep3_leds_init(void)
273{ 279{
274 if ((gpio_request(IGEP3_GPIO_LED0_RED, "gpio-led:red:d0") == 0) && 280 if (gpio_request_array(igep3_gpio_leds, ARRAY_SIZE(igep3_gpio_leds))) {
275 (gpio_direction_output(IGEP3_GPIO_LED0_RED, 1) == 0)) { 281 pr_warning("IGEP3: Could not obtain leds gpios\n");
276 gpio_export(IGEP3_GPIO_LED0_RED, 0); 282 return;
277 gpio_set_value(IGEP3_GPIO_LED0_RED, 1); 283 }
278 } else 284 gpio_export(IGEP3_GPIO_LED0_RED, 0);
279 pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_RED\n"); 285 gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
280 286 gpio_export(IGEP3_GPIO_LED1_RED, 0);
281 if ((gpio_request(IGEP3_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
282 (gpio_direction_output(IGEP3_GPIO_LED0_GREEN, 1) == 0)) {
283 gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
284 gpio_set_value(IGEP3_GPIO_LED0_GREEN, 1);
285 } else
286 pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_GREEN\n");
287
288 if ((gpio_request(IGEP3_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
289 (gpio_direction_output(IGEP3_GPIO_LED1_RED, 1) == 0)) {
290 gpio_export(IGEP3_GPIO_LED1_RED, 0);
291 gpio_set_value(IGEP3_GPIO_LED1_RED, 1);
292 } else
293 pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_RED\n");
294} 287}
295#endif 288#endif
296 289
297static int igep3_twl4030_gpio_setup(struct device *dev, 290static int igep3_twl4030_gpio_setup(struct device *dev,
298 unsigned gpio, unsigned ngpio) 291 unsigned gpio, unsigned ngpio)
299{ 292{
300 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 293#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
301 mmc[0].gpio_cd = gpio + 0; 294 int ret;
302 omap2_hsmmc_init(mmc);
303 295
304 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ 296 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
305#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) 297 ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
306 if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0) 298 "gpio-led:green:d1");
307 && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) { 299 if (ret)
308 gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
309 gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
310 } else
311 pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_GREEN\n"); 300 pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_GREEN\n");
301 else
302 gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
312#else 303#else
313 igep3_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1; 304 igep3_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
314#endif 305#endif
306 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
307 mmc[0].gpio_cd = gpio + 0;
308 omap2_hsmmc_init(mmc);
315 309
316 return 0; 310 return 0;
317}; 311};
@@ -358,35 +352,36 @@ static int __init igep3_i2c_init(void)
358} 352}
359 353
360#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE) 354#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
355static struct gpio igep3_wlan_bt_gpios[] __initdata = {
356 { IGEP3_GPIO_WIFI_NPD, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
357 { IGEP3_GPIO_WIFI_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
358 { IGEP3_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
359};
361 360
362static void __init igep3_wifi_bt_init(void) 361static void __init igep3_wifi_bt_init(void)
363{ 362{
363 int err;
364
364 /* Configure MUX values for W-LAN + Bluetooth GPIO's */ 365 /* Configure MUX values for W-LAN + Bluetooth GPIO's */
365 omap_mux_init_gpio(IGEP3_GPIO_WIFI_NPD, OMAP_PIN_OUTPUT); 366 omap_mux_init_gpio(IGEP3_GPIO_WIFI_NPD, OMAP_PIN_OUTPUT);
366 omap_mux_init_gpio(IGEP3_GPIO_WIFI_NRESET, OMAP_PIN_OUTPUT); 367 omap_mux_init_gpio(IGEP3_GPIO_WIFI_NRESET, OMAP_PIN_OUTPUT);
367 omap_mux_init_gpio(IGEP3_GPIO_BT_NRESET, OMAP_PIN_OUTPUT); 368 omap_mux_init_gpio(IGEP3_GPIO_BT_NRESET, OMAP_PIN_OUTPUT);
368 369
369 /* Set GPIO's for W-LAN + Bluetooth combo module */ 370 /* Set GPIO's for W-LAN + Bluetooth combo module */
370 if ((gpio_request(IGEP3_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) && 371 err = gpio_request_array(igep3_wlan_bt_gpios,
371 (gpio_direction_output(IGEP3_GPIO_WIFI_NPD, 1) == 0)) { 372 ARRAY_SIZE(igep3_wlan_bt_gpios));
372 gpio_export(IGEP3_GPIO_WIFI_NPD, 0); 373 if (err) {
373 } else 374 pr_warning("IGEP3: Could not obtain WIFI/BT gpios\n");
374 pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NPD\n"); 375 return;
375 376 }
376 if ((gpio_request(IGEP3_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) && 377
377 (gpio_direction_output(IGEP3_GPIO_WIFI_NRESET, 1) == 0)) { 378 gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
378 gpio_export(IGEP3_GPIO_WIFI_NRESET, 0); 379 gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
379 gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0); 380 gpio_export(IGEP3_GPIO_BT_NRESET, 0);
380 udelay(10); 381
381 gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1); 382 gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
382 } else 383 udelay(10);
383 pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NRESET\n"); 384 gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
384
385 if ((gpio_request(IGEP3_GPIO_BT_NRESET, "GPIO_BT_NRESET") == 0) &&
386 (gpio_direction_output(IGEP3_GPIO_BT_NRESET, 1) == 0)) {
387 gpio_export(IGEP3_GPIO_BT_NRESET, 0);
388 } else
389 pr_warning("IGEP3: Could not obtain gpio GPIO_BT_NRESET\n");
390} 385}
391#else 386#else
392void __init igep3_wifi_bt_init(void) {} 387void __init igep3_wifi_bt_init(void) {}
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index e710cd9e079b..8d74318ed495 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
+++ b/arch/arm/mach-omap2/board-n8x0.c
@@ -106,14 +106,13 @@ static void __init n8x0_usb_init(void)
106 static char announce[] __initdata = KERN_INFO "TUSB 6010\n"; 106 static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
107 107
108 /* PM companion chip power control pin */ 108 /* PM companion chip power control pin */
109 ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable"); 109 ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW,
110 "TUSB6010 enable");
110 if (ret != 0) { 111 if (ret != 0) {
111 printk(KERN_ERR "Could not get TUSB power GPIO%i\n", 112 printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
112 TUSB6010_GPIO_ENABLE); 113 TUSB6010_GPIO_ENABLE);
113 return; 114 return;
114 } 115 }
115 gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
116
117 tusb_set_power(0); 116 tusb_set_power(0);
118 117
119 ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2, 118 ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
@@ -494,8 +493,12 @@ static struct omap_mmc_platform_data mmc1_data = {
494 493
495static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC]; 494static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
496 495
497static void __init n8x0_mmc_init(void) 496static struct gpio n810_emmc_gpios[] __initdata = {
497 { N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" },
498 { N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" },
499};
498 500
501static void __init n8x0_mmc_init(void)
499{ 502{
500 int err; 503 int err;
501 504
@@ -512,27 +515,18 @@ static void __init n8x0_mmc_init(void)
512 mmc1_data.slots[1].ban_openended = 1; 515 mmc1_data.slots[1].ban_openended = 1;
513 } 516 }
514 517
515 err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch"); 518 err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW,
519 "MMC slot switch");
516 if (err) 520 if (err)
517 return; 521 return;
518 522
519 gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0);
520
521 if (machine_is_nokia_n810()) { 523 if (machine_is_nokia_n810()) {
522 err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf"); 524 err = gpio_request_array(n810_emmc_gpios,
523 if (err) { 525 ARRAY_SIZE(n810_emmc_gpios));
524 gpio_free(N8X0_SLOT_SWITCH_GPIO);
525 return;
526 }
527 gpio_direction_output(N810_EMMC_VSD_GPIO, 0);
528
529 err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd");
530 if (err) { 526 if (err) {
531 gpio_free(N8X0_SLOT_SWITCH_GPIO); 527 gpio_free(N8X0_SLOT_SWITCH_GPIO);
532 gpio_free(N810_EMMC_VSD_GPIO);
533 return; 528 return;
534 } 529 }
535 gpio_direction_output(N810_EMMC_VIO_GPIO, 0);
536 } 530 }
537 531
538 mmc_data[0] = &mmc1_data; 532 mmc_data[0] = &mmc1_data;
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index bc30ab092d1e..3ff3a2c4b86e 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -80,6 +80,12 @@ static u8 omap3_beagle_get_rev(void)
80 return omap3_beagle_version; 80 return omap3_beagle_version;
81} 81}
82 82
83static struct gpio omap3_beagle_rev_gpios[] __initdata = {
84 { 171, GPIOF_IN, "rev_id_0" },
85 { 172, GPIOF_IN, "rev_id_1" },
86 { 173, GPIOF_IN, "rev_id_2" },
87};
88
83static void __init omap3_beagle_init_rev(void) 89static void __init omap3_beagle_init_rev(void)
84{ 90{
85 int ret; 91 int ret;
@@ -89,21 +95,13 @@ static void __init omap3_beagle_init_rev(void)
89 omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP); 95 omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
90 omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP); 96 omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
91 97
92 ret = gpio_request(171, "rev_id_0"); 98 ret = gpio_request_array(omap3_beagle_rev_gpios,
93 if (ret < 0) 99 ARRAY_SIZE(omap3_beagle_rev_gpios));
94 goto fail0; 100 if (ret < 0) {
95 101 printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
96 ret = gpio_request(172, "rev_id_1"); 102 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
97 if (ret < 0) 103 return;
98 goto fail1; 104 }
99
100 ret = gpio_request(173, "rev_id_2");
101 if (ret < 0)
102 goto fail2;
103
104 gpio_direction_input(171);
105 gpio_direction_input(172);
106 gpio_direction_input(173);
107 105
108 beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1) 106 beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
109 | (gpio_get_value(173) << 2); 107 | (gpio_get_value(173) << 2);
@@ -129,18 +127,6 @@ static void __init omap3_beagle_init_rev(void)
129 printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev); 127 printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
130 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN; 128 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
131 } 129 }
132
133 return;
134
135fail2:
136 gpio_free(172);
137fail1:
138 gpio_free(171);
139fail0:
140 printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
141 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
142
143 return;
144} 130}
145 131
146static struct mtd_partition omap3beagle_nand_partitions[] = { 132static struct mtd_partition omap3beagle_nand_partitions[] = {
@@ -235,13 +221,10 @@ static void __init beagle_display_init(void)
235{ 221{
236 int r; 222 int r;
237 223
238 r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset"); 224 r = gpio_request_one(beagle_dvi_device.reset_gpio, GPIOF_OUT_INIT_LOW,
239 if (r < 0) { 225 "DVI reset");
226 if (r < 0)
240 printk(KERN_ERR "Unable to get DVI reset GPIO\n"); 227 printk(KERN_ERR "Unable to get DVI reset GPIO\n");
241 return;
242 }
243
244 gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
245} 228}
246 229
247#include "sdram-micron-mt46h32m32lf-6.h" 230#include "sdram-micron-mt46h32m32lf-6.h"
@@ -268,7 +251,7 @@ static struct gpio_led gpio_leds[];
268static int beagle_twl_gpio_setup(struct device *dev, 251static int beagle_twl_gpio_setup(struct device *dev,
269 unsigned gpio, unsigned ngpio) 252 unsigned gpio, unsigned ngpio)
270{ 253{
271 int r; 254 int r, usb_pwr_level;
272 255
273 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 256 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
274 mmc[0].gpio_wp = -EINVAL; 257 mmc[0].gpio_wp = -EINVAL;
@@ -287,66 +270,46 @@ static int beagle_twl_gpio_setup(struct device *dev,
287 beagle_vmmc1_supply.dev = mmc[0].dev; 270 beagle_vmmc1_supply.dev = mmc[0].dev;
288 beagle_vsim_supply.dev = mmc[0].dev; 271 beagle_vsim_supply.dev = mmc[0].dev;
289 272
290 /* REVISIT: need ehci-omap hooks for external VBUS
291 * power switch and overcurrent detect
292 */
293 if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
294 r = gpio_request(gpio + 1, "EHCI_nOC");
295 if (!r) {
296 r = gpio_direction_input(gpio + 1);
297 if (r)
298 gpio_free(gpio + 1);
299 }
300 if (r)
301 pr_err("%s: unable to configure EHCI_nOC\n", __func__);
302 }
303
304 /* 273 /*
305 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active 274 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
306 * high / others active low) 275 * high / others active low)
307 */ 276 * DVI reset GPIO is different between beagle revisions
308 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
309 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
310 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
311 else
312 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
313
314 /* DVI reset GPIO is different between beagle revisions */
315 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
316 beagle_dvi_device.reset_gpio = 129;
317 else
318 beagle_dvi_device.reset_gpio = 170;
319
320 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
321 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
322
323 /*
324 * gpio + 1 on Xm controls the TFP410's enable line (active low)
325 * gpio + 2 control varies depending on the board rev as follows:
326 * P7/P8 revisions(prototype): Camera EN
327 * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
328 */ 277 */
329 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 278 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
330 r = gpio_request(gpio + 1, "nDVI_PWR_EN"); 279 usb_pwr_level = GPIOF_OUT_INIT_HIGH;
331 if (!r) { 280 beagle_dvi_device.reset_gpio = 129;
332 r = gpio_direction_output(gpio + 1, 0); 281 /*
333 if (r) 282 * gpio + 1 on Xm controls the TFP410's enable line (active low)
334 gpio_free(gpio + 1); 283 * gpio + 2 control varies depending on the board rev as below:
335 } 284 * P7/P8 revisions(prototype): Camera EN
285 * A2+ revisions (production): LDO (DVI, serial, led blocks)
286 */
287 r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW,
288 "nDVI_PWR_EN");
336 if (r) 289 if (r)
337 pr_err("%s: unable to configure nDVI_PWR_EN\n", 290 pr_err("%s: unable to configure nDVI_PWR_EN\n",
338 __func__); 291 __func__);
339 r = gpio_request(gpio + 2, "DVI_LDO_EN"); 292 r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
340 if (!r) { 293 "DVI_LDO_EN");
341 r = gpio_direction_output(gpio + 2, 1);
342 if (r)
343 gpio_free(gpio + 2);
344 }
345 if (r) 294 if (r)
346 pr_err("%s: unable to configure DVI_LDO_EN\n", 295 pr_err("%s: unable to configure DVI_LDO_EN\n",
347 __func__); 296 __func__);
297 } else {
298 usb_pwr_level = GPIOF_OUT_INIT_LOW;
299 beagle_dvi_device.reset_gpio = 170;
300 /*
301 * REVISIT: need ehci-omap hooks for external VBUS
302 * power switch and overcurrent detect
303 */
304 if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
305 pr_err("%s: unable to configure EHCI_nOC\n", __func__);
348 } 306 }
349 307
308 gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
309
310 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
311 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
312
350 return 0; 313 return 0;
351} 314}
352 315
@@ -608,9 +571,8 @@ static void __init omap3_beagle_init(void)
608 omap_serial_init(); 571 omap_serial_init();
609 572
610 omap_mux_init_gpio(170, OMAP_PIN_INPUT); 573 omap_mux_init_gpio(170, OMAP_PIN_INPUT);
611 gpio_request(170, "DVI_nPD");
612 /* REVISIT leave DVI powered down until it's needed ... */ 574 /* REVISIT leave DVI powered down until it's needed ... */
613 gpio_direction_output(170, true); 575 gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
614 576
615 usb_musb_init(NULL); 577 usb_musb_init(NULL);
616 usbhs_init(&usbhs_bdata); 578 usbhs_init(&usbhs_bdata);
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 5066b0bbf63d..02e1ad29e1e8 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -149,6 +149,15 @@ static inline void __init omap3evm_init_smsc911x(void) { return; }
149#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210 149#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
150#define OMAP3EVM_DVI_PANEL_EN_GPIO 199 150#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
151 151
152static struct gpio omap3_evm_dss_gpios[] __initdata = {
153 { OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
154 { OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
155 { OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
156 { OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
157 { OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
158 { OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
159};
160
152static int lcd_enabled; 161static int lcd_enabled;
153static int dvi_enabled; 162static int dvi_enabled;
154 163
@@ -156,61 +165,10 @@ static void __init omap3_evm_display_init(void)
156{ 165{
157 int r; 166 int r;
158 167
159 r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb"); 168 r = gpio_request_array(omap3_evm_dss_gpios,
160 if (r) { 169 ARRAY_SIZE(omap3_evm_dss_gpios));
161 printk(KERN_ERR "failed to get lcd_panel_resb\n"); 170 if (r)
162 return; 171 printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
163 }
164 gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
165
166 r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
167 if (r) {
168 printk(KERN_ERR "failed to get lcd_panel_ini\n");
169 goto err_1;
170 }
171 gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
172
173 r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
174 if (r) {
175 printk(KERN_ERR "failed to get lcd_panel_qvga\n");
176 goto err_2;
177 }
178 gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
179
180 r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
181 if (r) {
182 printk(KERN_ERR "failed to get lcd_panel_lr\n");
183 goto err_3;
184 }
185 gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
186
187 r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
188 if (r) {
189 printk(KERN_ERR "failed to get lcd_panel_ud\n");
190 goto err_4;
191 }
192 gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
193
194 r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
195 if (r) {
196 printk(KERN_ERR "failed to get lcd_panel_envdd\n");
197 goto err_5;
198 }
199 gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
200
201 return;
202
203err_5:
204 gpio_free(OMAP3EVM_LCD_PANEL_UD);
205err_4:
206 gpio_free(OMAP3EVM_LCD_PANEL_LR);
207err_3:
208 gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
209err_2:
210 gpio_free(OMAP3EVM_LCD_PANEL_INI);
211err_1:
212 gpio_free(OMAP3EVM_LCD_PANEL_RESB);
213
214} 172}
215 173
216static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev) 174static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
@@ -400,7 +358,7 @@ static struct platform_device leds_gpio = {
400static int omap3evm_twl_gpio_setup(struct device *dev, 358static int omap3evm_twl_gpio_setup(struct device *dev,
401 unsigned gpio, unsigned ngpio) 359 unsigned gpio, unsigned ngpio)
402{ 360{
403 int r; 361 int r, lcd_bl_en;
404 362
405 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 363 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
406 omap_mux_init_gpio(63, OMAP_PIN_INPUT); 364 omap_mux_init_gpio(63, OMAP_PIN_INPUT);
@@ -417,16 +375,14 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
417 */ 375 */
418 376
419 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */ 377 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
420 r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL"); 378 lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
421 if (!r) 379 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
422 r = gpio_direction_output(gpio + TWL4030_GPIO_MAX, 380 r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
423 (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
424 if (r) 381 if (r)
425 printk(KERN_ERR "failed to get/set lcd_bkl gpio\n"); 382 printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
426 383
427 /* gpio + 7 == DVI Enable */ 384 /* gpio + 7 == DVI Enable */
428 gpio_request(gpio + 7, "EN_DVI"); 385 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
429 gpio_direction_output(gpio + 7, 0);
430 386
431 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ 387 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
432 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 388 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -717,6 +673,11 @@ static struct omap_musb_board_data musb_board_data = {
717 .power = 100, 673 .power = 100,
718}; 674};
719 675
676static struct gpio omap3_evm_ehci_gpios[] __initdata = {
677 { OMAP3_EVM_EHCI_VBUS, GPIOF_OUT_INIT_HIGH, "enable EHCI VBUS" },
678 { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" },
679};
680
720static void __init omap3_evm_init(void) 681static void __init omap3_evm_init(void)
721{ 682{
722 omap3_evm_get_revision(); 683 omap3_evm_get_revision();
@@ -740,16 +701,12 @@ static void __init omap3_evm_init(void)
740 701
741 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) { 702 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
742 /* enable EHCI VBUS using GPIO22 */ 703 /* enable EHCI VBUS using GPIO22 */
743 omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP); 704 omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
744 gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
745 gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
746 gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
747
748 /* Select EHCI port on main board */ 705 /* Select EHCI port on main board */
749 omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP); 706 omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
750 gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port"); 707 OMAP_PIN_INPUT_PULLUP);
751 gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0); 708 gpio_request_array(omap3_evm_ehci_gpios,
752 gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0); 709 ARRAY_SIZE(omap3_evm_ehci_gpios));
753 710
754 /* setup EHCI phy reset config */ 711 /* setup EHCI phy reset config */
755 omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP); 712 omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index 6c22d3f238eb..78dd2a7fe6e6 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -305,24 +305,13 @@ static int omap3pandora_twl_gpio_setup(struct device *dev,
305 305
306 /* gpio + 13 drives 32kHz buffer for wifi module */ 306 /* gpio + 13 drives 32kHz buffer for wifi module */
307 gpio_32khz = gpio + 13; 307 gpio_32khz = gpio + 13;
308 ret = gpio_request(gpio_32khz, "wifi 32kHz"); 308 ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz");
309 if (ret < 0) { 309 if (ret < 0) {
310 pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret); 310 pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret);
311 goto fail; 311 return -ENODEV;
312 }
313
314 ret = gpio_direction_output(gpio_32khz, 1);
315 if (ret < 0) {
316 pr_err("Cannot set GPIO line %d, ret=%d\n", gpio_32khz, ret);
317 goto fail_direction;
318 } 312 }
319 313
320 return 0; 314 return 0;
321
322fail_direction:
323 gpio_free(gpio_32khz);
324fail:
325 return -ENODEV;
326} 315}
327 316
328static struct twl4030_gpio_platform_data omap3pandora_gpio_data = { 317static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
@@ -584,14 +573,10 @@ static void __init pandora_wl1251_init(void)
584 573
585 memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata)); 574 memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
586 575
587 ret = gpio_request(PANDORA_WIFI_IRQ_GPIO, "wl1251 irq"); 576 ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
588 if (ret < 0) 577 if (ret < 0)
589 goto fail; 578 goto fail;
590 579
591 ret = gpio_direction_input(PANDORA_WIFI_IRQ_GPIO);
592 if (ret < 0)
593 goto fail_irq;
594
595 pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO); 580 pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
596 if (pandora_wl1251_pdata.irq < 0) 581 if (pandora_wl1251_pdata.irq < 0)
597 goto fail_irq; 582 goto fail_irq;
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 9981d06b7269..085c60a7c47c 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -331,12 +331,11 @@ omap3stalker_twl_gpio_setup(struct device *dev,
331 */ 331 */
332 332
333 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */ 333 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
334 gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL"); 334 gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
335 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 335 "EN_LCD_BKL");
336 336
337 /* gpio + 7 == DVI Enable */ 337 /* gpio + 7 == DVI Enable */
338 gpio_request(gpio + 7, "EN_DVI"); 338 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
339 gpio_direction_output(gpio + 7, 0);
340 339
341 /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */ 340 /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */
342 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 341 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 392278d9a882..82872d7d313b 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -146,13 +146,11 @@ static int touchbook_twl_gpio_setup(struct device *dev,
146 /* REVISIT: need ehci-omap hooks for external VBUS 146 /* REVISIT: need ehci-omap hooks for external VBUS
147 * power switch and overcurrent detect 147 * power switch and overcurrent detect
148 */ 148 */
149 149 gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC");
150 gpio_request(gpio + 1, "EHCI_nOC");
151 gpio_direction_input(gpio + 1);
152 150
153 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ 151 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
154 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); 152 gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
155 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 153 "nEN_USB_PWR");
156 154
157 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 155 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
158 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 156 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -401,15 +399,10 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
401 399
402static void omap3_touchbook_poweroff(void) 400static void omap3_touchbook_poweroff(void)
403{ 401{
404 int r; 402 int pwr_off = TB_KILL_POWER_GPIO;
405 403
406 r = gpio_request(TB_KILL_POWER_GPIO, "DVI reset"); 404 if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "DVI reset") < 0)
407 if (r < 0) {
408 printk(KERN_ERR "Unable to get kill power GPIO\n"); 405 printk(KERN_ERR "Unable to get kill power GPIO\n");
409 return;
410 }
411
412 gpio_direction_output(TB_KILL_POWER_GPIO, 0);
413} 406}
414 407
415static int __init early_touchbook_revision(char *p) 408static int __init early_touchbook_revision(char *p)
@@ -435,9 +428,8 @@ static void __init omap3_touchbook_init(void)
435 omap_serial_init(); 428 omap_serial_init();
436 429
437 omap_mux_init_gpio(170, OMAP_PIN_INPUT); 430 omap_mux_init_gpio(170, OMAP_PIN_INPUT);
438 gpio_request(176, "DVI_nPD");
439 /* REVISIT leave DVI powered down until it's needed ... */ 431 /* REVISIT leave DVI powered down until it's needed ... */
440 gpio_direction_output(176, true); 432 gpio_request_one(176, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
441 433
442 /* Touchscreen and accelerometer */ 434 /* Touchscreen and accelerometer */
443 omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); 435 omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata);
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 7eaad629c4c2..5d7c0a313dc7 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -112,6 +112,11 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
112 .reset_gpio_port[2] = -EINVAL 112 .reset_gpio_port[2] = -EINVAL
113}; 113};
114 114
115static struct gpio panda_ehci_gpios[] __initdata = {
116 { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" },
117 { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" },
118};
119
115static void __init omap4_ehci_init(void) 120static void __init omap4_ehci_init(void)
116{ 121{
117 int ret; 122 int ret;
@@ -121,44 +126,27 @@ static void __init omap4_ehci_init(void)
121 phy_ref_clk = clk_get(NULL, "auxclk3_ck"); 126 phy_ref_clk = clk_get(NULL, "auxclk3_ck");
122 if (IS_ERR(phy_ref_clk)) { 127 if (IS_ERR(phy_ref_clk)) {
123 pr_err("Cannot request auxclk3\n"); 128 pr_err("Cannot request auxclk3\n");
124 goto error1; 129 return;
125 } 130 }
126 clk_set_rate(phy_ref_clk, 19200000); 131 clk_set_rate(phy_ref_clk, 19200000);
127 clk_enable(phy_ref_clk); 132 clk_enable(phy_ref_clk);
128 133
129 /* disable the power to the usb hub prior to init */ 134 /* disable the power to the usb hub prior to init and reset phy+hub */
130 ret = gpio_request(GPIO_HUB_POWER, "hub_power"); 135 ret = gpio_request_array(panda_ehci_gpios,
136 ARRAY_SIZE(panda_ehci_gpios));
131 if (ret) { 137 if (ret) {
132 pr_err("Cannot request GPIO %d\n", GPIO_HUB_POWER); 138 pr_err("Unable to initialize EHCI power/reset\n");
133 goto error1; 139 return;
134 } 140 }
135 gpio_export(GPIO_HUB_POWER, 0);
136 gpio_direction_output(GPIO_HUB_POWER, 0);
137 gpio_set_value(GPIO_HUB_POWER, 0);
138 141
139 /* reset phy+hub */ 142 gpio_export(GPIO_HUB_POWER, 0);
140 ret = gpio_request(GPIO_HUB_NRESET, "hub_nreset");
141 if (ret) {
142 pr_err("Cannot request GPIO %d\n", GPIO_HUB_NRESET);
143 goto error2;
144 }
145 gpio_export(GPIO_HUB_NRESET, 0); 143 gpio_export(GPIO_HUB_NRESET, 0);
146 gpio_direction_output(GPIO_HUB_NRESET, 0);
147 gpio_set_value(GPIO_HUB_NRESET, 0);
148 gpio_set_value(GPIO_HUB_NRESET, 1); 144 gpio_set_value(GPIO_HUB_NRESET, 1);
149 145
150 usbhs_init(&usbhs_bdata); 146 usbhs_init(&usbhs_bdata);
151 147
152 /* enable power to hub */ 148 /* enable power to hub */
153 gpio_set_value(GPIO_HUB_POWER, 1); 149 gpio_set_value(GPIO_HUB_POWER, 1);
154 return;
155
156error2:
157 gpio_free(GPIO_HUB_POWER);
158error1:
159 pr_err("Unable to initialize EHCI power/reset\n");
160 return;
161
162} 150}
163 151
164static struct omap_musb_board_data musb_board_data = { 152static struct omap_musb_board_data musb_board_data = {
@@ -638,27 +626,19 @@ static void omap4_panda_hdmi_mux_init(void)
638 OMAP_PIN_INPUT_PULLUP); 626 OMAP_PIN_INPUT_PULLUP);
639} 627}
640 628
629static struct gpio panda_hdmi_gpios[] = {
630 { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
631 { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
632};
633
641static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev) 634static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
642{ 635{
643 int status; 636 int status;
644 637
645 status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, 638 status = gpio_request_array(panda_hdmi_gpios,
646 "hdmi_gpio_hpd"); 639 ARRAY_SIZE(panda_hdmi_gpios));
647 if (status) { 640 if (status)
648 pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD); 641 pr_err("Cannot request HDMI GPIOs\n");
649 return status;
650 }
651 status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
652 "hdmi_gpio_ls_oe");
653 if (status) {
654 pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
655 goto error1;
656 }
657
658 return 0;
659
660error1:
661 gpio_free(HDMI_GPIO_HPD);
662 642
663 return status; 643 return status;
664} 644}
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index e152c13ded75..c03f92b14f9c 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -151,21 +151,20 @@ static int dvi_enabled;
151#define OVERO_GPIO_LCD_EN 144 151#define OVERO_GPIO_LCD_EN 144
152#define OVERO_GPIO_LCD_BL 145 152#define OVERO_GPIO_LCD_BL 145
153 153
154static struct gpio overo_dss_gpios[] __initdata = {
155 { OVERO_GPIO_LCD_EN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_EN" },
156 { OVERO_GPIO_LCD_BL, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_BL" },
157};
158
154static void __init overo_display_init(void) 159static void __init overo_display_init(void)
155{ 160{
156 if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) && 161 if (gpio_request_array(overo_dss_gpios, ARRAY_SIZE(overo_dss_gpios))) {
157 (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0)) 162 printk(KERN_ERR "could not obtain DSS control GPIOs\n");
158 gpio_export(OVERO_GPIO_LCD_EN, 0); 163 return;
159 else 164 }
160 printk(KERN_ERR "could not obtain gpio for "
161 "OVERO_GPIO_LCD_EN\n");
162 165
163 if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) && 166 gpio_export(OVERO_GPIO_LCD_EN, 0);
164 (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0)) 167 gpio_export(OVERO_GPIO_LCD_BL, 0);
165 gpio_export(OVERO_GPIO_LCD_BL, 0);
166 else
167 printk(KERN_ERR "could not obtain gpio for "
168 "OVERO_GPIO_LCD_BL\n");
169} 168}
170 169
171static int overo_panel_enable_dvi(struct omap_dss_device *dssdev) 170static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
@@ -553,8 +552,15 @@ static struct omap_board_mux board_mux[] __initdata = {
553}; 552};
554#endif 553#endif
555 554
555static struct gpio overo_bt_gpios[] __initdata = {
556 { OVERO_GPIO_BT_XGATE, GPIOF_OUT_INIT_LOW, "lcd enable" },
557 { OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
558};
559
556static void __init overo_init(void) 560static void __init overo_init(void)
557{ 561{
562 int ret;
563
558 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 564 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
559 overo_i2c_init(); 565 overo_i2c_init();
560 omap_display_init(&overo_dss_data); 566 omap_display_init(&overo_dss_data);
@@ -574,9 +580,9 @@ static void __init overo_init(void)
574 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 580 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
575 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); 581 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
576 582
577 if ((gpio_request(OVERO_GPIO_W2W_NRESET, 583 ret = gpio_request_one(OVERO_GPIO_W2W_NRESET, GPIOF_OUT_INIT_HIGH,
578 "OVERO_GPIO_W2W_NRESET") == 0) && 584 "OVERO_GPIO_W2W_NRESET");
579 (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) { 585 if (ret == 0) {
580 gpio_export(OVERO_GPIO_W2W_NRESET, 0); 586 gpio_export(OVERO_GPIO_W2W_NRESET, 0);
581 gpio_set_value(OVERO_GPIO_W2W_NRESET, 0); 587 gpio_set_value(OVERO_GPIO_W2W_NRESET, 0);
582 udelay(10); 588 udelay(10);
@@ -586,25 +592,20 @@ static void __init overo_init(void)
586 "OVERO_GPIO_W2W_NRESET\n"); 592 "OVERO_GPIO_W2W_NRESET\n");
587 } 593 }
588 594
589 if ((gpio_request(OVERO_GPIO_BT_XGATE, "OVERO_GPIO_BT_XGATE") == 0) && 595 ret = gpio_request_array(overo_bt_gpios, ARRAY_SIZE(overo_bt_gpios));
590 (gpio_direction_output(OVERO_GPIO_BT_XGATE, 0) == 0)) 596 if (ret) {
597 pr_err("%s: could not obtain BT gpios\n", __func__);
598 } else {
591 gpio_export(OVERO_GPIO_BT_XGATE, 0); 599 gpio_export(OVERO_GPIO_BT_XGATE, 0);
592 else
593 printk(KERN_ERR "could not obtain gpio for OVERO_GPIO_BT_XGATE\n");
594
595 if ((gpio_request(OVERO_GPIO_BT_NRESET, "OVERO_GPIO_BT_NRESET") == 0) &&
596 (gpio_direction_output(OVERO_GPIO_BT_NRESET, 1) == 0)) {
597 gpio_export(OVERO_GPIO_BT_NRESET, 0); 600 gpio_export(OVERO_GPIO_BT_NRESET, 0);
598 gpio_set_value(OVERO_GPIO_BT_NRESET, 0); 601 gpio_set_value(OVERO_GPIO_BT_NRESET, 0);
599 mdelay(6); 602 mdelay(6);
600 gpio_set_value(OVERO_GPIO_BT_NRESET, 1); 603 gpio_set_value(OVERO_GPIO_BT_NRESET, 1);
601 } else {
602 printk(KERN_ERR "could not obtain gpio for "
603 "OVERO_GPIO_BT_NRESET\n");
604 } 604 }
605 605
606 if ((gpio_request(OVERO_GPIO_USBH_CPEN, "OVERO_GPIO_USBH_CPEN") == 0) && 606 ret = gpio_request_one(OVERO_GPIO_USBH_CPEN, GPIOF_OUT_INIT_HIGH,
607 (gpio_direction_output(OVERO_GPIO_USBH_CPEN, 1) == 0)) 607 "OVERO_GPIO_USBH_CPEN");
608 if (ret == 0)
608 gpio_export(OVERO_GPIO_USBH_CPEN, 0); 609 gpio_export(OVERO_GPIO_USBH_CPEN, 0);
609 else 610 else
610 printk(KERN_ERR "could not obtain gpio for " 611 printk(KERN_ERR "could not obtain gpio for "
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index a5bf5e92eae8..2e509f9149e2 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -558,10 +558,8 @@ static __init void rx51_init_si4713(void)
558static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n) 558static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
559{ 559{
560 /* FIXME this gpio setup is just a placeholder for now */ 560 /* FIXME this gpio setup is just a placeholder for now */
561 gpio_request(gpio + 6, "backlight_pwm"); 561 gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
562 gpio_direction_output(gpio + 6, 0); 562 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_HIGH, "speaker_en");
563 gpio_request(gpio + 7, "speaker_en");
564 gpio_direction_output(gpio + 7, 1);
565 563
566 return 0; 564 return 0;
567} 565}
@@ -912,26 +910,20 @@ static void rx51_wl1251_set_power(bool enable)
912 gpio_set_value(RX51_WL1251_POWER_GPIO, enable); 910 gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
913} 911}
914 912
913static struct gpio rx51_wl1251_gpios[] __initdata = {
914 { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW, "wl1251 power" },
915 { RX51_WL1251_IRQ_GPIO, GPIOF_IN, "wl1251 irq" },
916};
917
915static void __init rx51_init_wl1251(void) 918static void __init rx51_init_wl1251(void)
916{ 919{
917 int irq, ret; 920 int irq, ret;
918 921
919 ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power"); 922 ret = gpio_request_array(rx51_wl1251_gpios,
923 ARRAY_SIZE(rx51_wl1251_gpios));
920 if (ret < 0) 924 if (ret < 0)
921 goto error; 925 goto error;
922 926
923 ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
924 if (ret < 0)
925 goto err_power;
926
927 ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
928 if (ret < 0)
929 goto err_power;
930
931 ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
932 if (ret < 0)
933 goto err_irq;
934
935 irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO); 927 irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
936 if (irq < 0) 928 if (irq < 0)
937 goto err_irq; 929 goto err_irq;
@@ -943,10 +935,7 @@ static void __init rx51_init_wl1251(void)
943 935
944err_irq: 936err_irq:
945 gpio_free(RX51_WL1251_IRQ_GPIO); 937 gpio_free(RX51_WL1251_IRQ_GPIO);
946
947err_power:
948 gpio_free(RX51_WL1251_POWER_GPIO); 938 gpio_free(RX51_WL1251_POWER_GPIO);
949
950error: 939error:
951 printk(KERN_ERR "wl1251 board initialisation failed\n"); 940 printk(KERN_ERR "wl1251 board initialisation failed\n");
952 wl1251_pdata.set_power = NULL; 941 wl1251_pdata.set_power = NULL;
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c
index 89a66db8b77d..19777333aef8 100644
--- a/arch/arm/mach-omap2/board-rx51-video.c
+++ b/arch/arm/mach-omap2/board-rx51-video.c
@@ -76,13 +76,12 @@ static int __init rx51_video_init(void)
76 return 0; 76 return 0;
77 } 77 }
78 78
79 if (gpio_request(RX51_LCD_RESET_GPIO, "LCD ACX565AKM reset")) { 79 if (gpio_request_one(RX51_LCD_RESET_GPIO, GPIOF_OUT_INIT_HIGH,
80 "LCD ACX565AKM reset")) {
80 pr_err("%s failed to get LCD Reset GPIO\n", __func__); 81 pr_err("%s failed to get LCD Reset GPIO\n", __func__);
81 return 0; 82 return 0;
82 } 83 }
83 84
84 gpio_direction_output(RX51_LCD_RESET_GPIO, 1);
85
86 omap_display_init(&rx51_dss_board_info); 85 omap_display_init(&rx51_dss_board_info);
87 return 0; 86 return 0;
88} 87}
diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
index 2ee9ab92e0c1..6402e781c458 100644
--- a/arch/arm/mach-omap2/board-zoom-debugboard.c
+++ b/arch/arm/mach-omap2/board-zoom-debugboard.c
@@ -77,12 +77,9 @@ static inline void __init zoom_init_quaduart(void)
77 77
78 quart_gpio = ZOOM_QUADUART_GPIO; 78 quart_gpio = ZOOM_QUADUART_GPIO;
79 79
80 if (gpio_request(quart_gpio, "TL16CP754C GPIO") < 0) { 80 if (gpio_request_one(quart_gpio, GPIOF_IN, "TL16CP754C GPIO") < 0)
81 printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n", 81 printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n",
82 quart_gpio); 82 quart_gpio);
83 return;
84 }
85 gpio_direction_input(quart_gpio);
86} 83}
87 84
88static inline int omap_zoom_debugboard_detect(void) 85static inline int omap_zoom_debugboard_detect(void)
@@ -92,12 +89,12 @@ static inline int omap_zoom_debugboard_detect(void)
92 89
93 debug_board_detect = ZOOM_SMSC911X_GPIO; 90 debug_board_detect = ZOOM_SMSC911X_GPIO;
94 91
95 if (gpio_request(debug_board_detect, "Zoom debug board detect") < 0) { 92 if (gpio_request_one(debug_board_detect, GPIOF_IN,
93 "Zoom debug board detect") < 0) {
96 printk(KERN_ERR "Failed to request GPIO%d for Zoom debug" 94 printk(KERN_ERR "Failed to request GPIO%d for Zoom debug"
97 "board detect\n", debug_board_detect); 95 "board detect\n", debug_board_detect);
98 return 0; 96 return 0;
99 } 97 }
100 gpio_direction_input(debug_board_detect);
101 98
102 if (!gpio_get_value(debug_board_detect)) { 99 if (!gpio_get_value(debug_board_detect)) {
103 ret = 0; 100 ret = 0;
diff --git a/arch/arm/mach-omap2/board-zoom-display.c b/arch/arm/mach-omap2/board-zoom-display.c
index 37b84c2b850f..ce53e82ba136 100644
--- a/arch/arm/mach-omap2/board-zoom-display.c
+++ b/arch/arm/mach-omap2/board-zoom-display.c
@@ -21,34 +21,19 @@
21#define LCD_PANEL_RESET_GPIO_PILOT 55 21#define LCD_PANEL_RESET_GPIO_PILOT 55
22#define LCD_PANEL_QVGA_GPIO 56 22#define LCD_PANEL_QVGA_GPIO 56
23 23
24static struct gpio zoom_lcd_gpios[] __initdata = {
25 { -EINVAL, GPIOF_OUT_INIT_HIGH, "lcd reset" },
26 { LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" },
27};
28
24static void zoom_lcd_panel_init(void) 29static void zoom_lcd_panel_init(void)
25{ 30{
26 int ret; 31 zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
27 unsigned char lcd_panel_reset_gpio;
28
29 lcd_panel_reset_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
30 LCD_PANEL_RESET_GPIO_PROD : 32 LCD_PANEL_RESET_GPIO_PROD :
31 LCD_PANEL_RESET_GPIO_PILOT; 33 LCD_PANEL_RESET_GPIO_PILOT;
32 34
33 ret = gpio_request(lcd_panel_reset_gpio, "lcd reset"); 35 if (gpio_request_array(zoom_lcd_gpios, ARRAY_SIZE(zoom_lcd_gpios)))
34 if (ret) { 36 pr_err("%s: Failed to get LCD GPIOs.\n", __func__);
35 pr_err("Failed to get LCD reset GPIO (gpio%d).\n",
36 lcd_panel_reset_gpio);
37 return;
38 }
39 gpio_direction_output(lcd_panel_reset_gpio, 1);
40
41 ret = gpio_request(LCD_PANEL_QVGA_GPIO, "lcd qvga");
42 if (ret) {
43 pr_err("Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n",
44 LCD_PANEL_QVGA_GPIO);
45 goto err0;
46 }
47 gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
48
49 return;
50err0:
51 gpio_free(lcd_panel_reset_gpio);
52} 37}
53 38
54static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev) 39static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev)
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
index 489294a715ce..118c6f53c5eb 100644
--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
@@ -277,13 +277,11 @@ static int zoom_twl_gpio_setup(struct device *dev,
277 zoom_vsim_supply.dev = mmc[0].dev; 277 zoom_vsim_supply.dev = mmc[0].dev;
278 zoom_vmmc2_supply.dev = mmc[1].dev; 278 zoom_vmmc2_supply.dev = mmc[1].dev;
279 279
280 ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable"); 280 ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
281 if (ret) { 281 "lcd enable");
282 if (ret)
282 pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n", 283 pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
283 LCD_PANEL_ENABLE_GPIO); 284 LCD_PANEL_ENABLE_GPIO);
284 return ret;
285 }
286 gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
287 285
288 return ret; 286 return ret;
289} 287}
diff --git a/arch/arm/mach-omap2/gpmc-smc91x.c b/arch/arm/mach-omap2/gpmc-smc91x.c
index 877c6f5807b7..ba10c24f3d8d 100644
--- a/arch/arm/mach-omap2/gpmc-smc91x.c
+++ b/arch/arm/mach-omap2/gpmc-smc91x.c
@@ -147,25 +147,24 @@ void __init gpmc_smc91x_init(struct omap_smc91x_platform_data *board_data)
147 goto free1; 147 goto free1;
148 } 148 }
149 149
150 if (gpio_request(gpmc_cfg->gpio_irq, "SMC91X irq") < 0) 150 if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "SMC91X irq") < 0)
151 goto free1; 151 goto free1;
152 152
153 gpio_direction_input(gpmc_cfg->gpio_irq);
154 gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq); 153 gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
155 154
156 if (gpmc_cfg->gpio_pwrdwn) { 155 if (gpmc_cfg->gpio_pwrdwn) {
157 ret = gpio_request(gpmc_cfg->gpio_pwrdwn, "SMC91X powerdown"); 156 ret = gpio_request_one(gpmc_cfg->gpio_pwrdwn,
157 GPIOF_OUT_INIT_LOW, "SMC91X powerdown");
158 if (ret) 158 if (ret)
159 goto free2; 159 goto free2;
160 gpio_direction_output(gpmc_cfg->gpio_pwrdwn, 0);
161 } 160 }
162 161
163 if (gpmc_cfg->gpio_reset) { 162 if (gpmc_cfg->gpio_reset) {
164 ret = gpio_request(gpmc_cfg->gpio_reset, "SMC91X reset"); 163 ret = gpio_request_one(gpmc_cfg->gpio_reset,
164 GPIOF_OUT_INIT_LOW, "SMC91X reset");
165 if (ret) 165 if (ret)
166 goto free3; 166 goto free3;
167 167
168 gpio_direction_output(gpmc_cfg->gpio_reset, 0);
169 gpio_set_value(gpmc_cfg->gpio_reset, 1); 168 gpio_set_value(gpmc_cfg->gpio_reset, 1);
170 msleep(100); 169 msleep(100);
171 gpio_set_value(gpmc_cfg->gpio_reset, 0); 170 gpio_set_value(gpmc_cfg->gpio_reset, 0);
diff --git a/arch/arm/mach-omap2/gpmc-smsc911x.c b/arch/arm/mach-omap2/gpmc-smsc911x.c
index e09374a48dd8..997033129d26 100644
--- a/arch/arm/mach-omap2/gpmc-smsc911x.c
+++ b/arch/arm/mach-omap2/gpmc-smsc911x.c
@@ -63,23 +63,22 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
63 gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0; 63 gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0;
64 gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff; 64 gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff;
65 65
66 if (gpio_request(gpmc_cfg->gpio_irq, "smsc911x irq") < 0) { 66 if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "smsc911x irq")) {
67 pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq); 67 pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq);
68 goto free1; 68 goto free1;
69 } 69 }
70 70
71 gpio_direction_input(gpmc_cfg->gpio_irq);
72 gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq); 71 gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
73 72
74 if (gpio_is_valid(gpmc_cfg->gpio_reset)) { 73 if (gpio_is_valid(gpmc_cfg->gpio_reset)) {
75 ret = gpio_request(gpmc_cfg->gpio_reset, "smsc911x reset"); 74 ret = gpio_request_one(gpmc_cfg->gpio_reset,
75 GPIOF_OUT_INIT_HIGH, "smsc911x reset");
76 if (ret) { 76 if (ret) {
77 pr_err("Failed to request reset GPIO%d\n", 77 pr_err("Failed to request reset GPIO%d\n",
78 gpmc_cfg->gpio_reset); 78 gpmc_cfg->gpio_reset);
79 goto free2; 79 goto free2;
80 } 80 }
81 81
82 gpio_direction_output(gpmc_cfg->gpio_reset, 1);
83 gpio_set_value(gpmc_cfg->gpio_reset, 0); 82 gpio_set_value(gpmc_cfg->gpio_reset, 0);
84 msleep(100); 83 msleep(100);
85 gpio_set_value(gpmc_cfg->gpio_reset, 1); 84 gpio_set_value(gpmc_cfg->gpio_reset, 1);
diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c
index 8a3c05f3c1d6..8dd26b765b7d 100644
--- a/arch/arm/mach-omap2/usb-tusb6010.c
+++ b/arch/arm/mach-omap2/usb-tusb6010.c
@@ -293,12 +293,11 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data,
293 ); 293 );
294 294
295 /* IRQ */ 295 /* IRQ */
296 status = gpio_request(irq, "TUSB6010 irq"); 296 status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq");
297 if (status < 0) { 297 if (status < 0) {
298 printk(error, 3, status); 298 printk(error, 3, status);
299 return status; 299 return status;
300 } 300 }
301 gpio_direction_input(irq);
302 tusb_resources[2].start = irq + IH_GPIO_BASE; 301 tusb_resources[2].start = irq + IH_GPIO_BASE;
303 302
304 /* set up memory timings ... can speed them up later */ 303 /* set up memory timings ... can speed them up later */