From: Igor Grinberg <grinberg@compulab.co.il>
To: Igor Grinberg <grinberg@compulab.co.il>
Cc: Kevin Hilman <khilman@ti.com>, Tony Lindgren <tony@atomide.com>,
Felipe Balbi <balbi@ti.com>, Mike Rapoport <mike@compulab.co.il>,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] arm: omap2plus: GPIO cleanup
Date: Wed, 11 May 2011 10:38:42 +0300 [thread overview]
Message-ID: <4DCA3D02.9070608@compulab.co.il> (raw)
In-Reply-To: <1304436129-7165-1-git-send-email-grinberg@compulab.co.il>
ping!
On 05/03/11 18:22, Igor Grinberg wrote:
> use gpio_request_<one|array>() instead of multiple gpiolib calls,
> remove unneeded variables, etc.
>
> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
> ---
> Boot tested on cm-t35 and compile tested for others.
>
> v2: rebased on top of Tony's devel-cleanup
>
>
> arch/arm/mach-omap2/board-2430sdp.c | 7 +-
> arch/arm/mach-omap2/board-3430sdp.c | 47 +++------
> arch/arm/mach-omap2/board-4430sdp.c | 98 ++++--------------
> arch/arm/mach-omap2/board-am3517crane.c | 10 +--
> arch/arm/mach-omap2/board-am3517evm.c | 54 +++-------
> arch/arm/mach-omap2/board-apollon.c | 29 +++---
> arch/arm/mach-omap2/board-cm-t35.c | 74 ++++---------
> arch/arm/mach-omap2/board-cm-t3517.c | 9 +-
> arch/arm/mach-omap2/board-devkit8000.c | 12 +-
> arch/arm/mach-omap2/board-igep0020.c | 143 +++++++++++++-------------
> arch/arm/mach-omap2/board-igep0030.c | 93 ++++++++---------
> arch/arm/mach-omap2/board-n8x0.c | 28 ++---
> arch/arm/mach-omap2/board-omap3beagle.c | 128 ++++++++---------------
> arch/arm/mach-omap2/board-omap3evm.c | 99 +++++-------------
> arch/arm/mach-omap2/board-omap3pandora.c | 21 +---
> arch/arm/mach-omap2/board-omap3stalker.c | 7 +-
> arch/arm/mach-omap2/board-omap3touchbook.c | 20 +---
> arch/arm/mach-omap2/board-omap4panda.c | 62 ++++--------
> arch/arm/mach-omap2/board-overo.c | 55 +++++-----
> arch/arm/mach-omap2/board-rx51-peripherals.c | 29 ++----
> arch/arm/mach-omap2/board-rx51-video.c | 5 +-
> arch/arm/mach-omap2/board-zoom-debugboard.c | 9 +-
> arch/arm/mach-omap2/board-zoom-display.c | 31 ++----
> arch/arm/mach-omap2/board-zoom-peripherals.c | 8 +-
> arch/arm/mach-omap2/gpmc-smc91x.c | 11 +-
> arch/arm/mach-omap2/gpmc-smsc911x.c | 7 +-
> arch/arm/mach-omap2/usb-tusb6010.c | 3 +-
> 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 a8810f8..d54969b 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 = {
>
> static void __init omap_2430sdp_init(void)
> {
> - int ret;
> -
> omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
>
> omap_board_config = sdp2430_config;
> @@ -246,9 +244,8 @@ static void __init omap_2430sdp_init(void)
> board_smc91x_init();
>
> /* Turn off secondary LCD backlight */
> - ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight");
> - if (ret == 0)
> - gpio_direction_output(SECONDARY_LCD_GPIO, 0);
> + gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
> + "Secondary LCD backlight");
> }
>
> static 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 951e585..99218a5 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 = {
> #define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
> #define SDP3430_LCD_PANEL_ENABLE_GPIO 5
>
> -static unsigned backlight_gpio;
> -static unsigned enable_gpio;
> +static struct gpio sdp3430_dss_gpios[] __initdata = {
> + {SDP3430_LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, "LCD reset" },
> + {SDP3430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, "LCD Backlight"},
> +};
> +
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -135,29 +138,11 @@ static void __init sdp3430_display_init(void)
> {
> int r;
>
> - enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO;
> - backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
> -
> - r = gpio_request(enable_gpio, "LCD reset");
> - if (r) {
> - printk(KERN_ERR "failed to get LCD reset GPIO\n");
> - goto err0;
> - }
> -
> - r = gpio_request(backlight_gpio, "LCD Backlight");
> - if (r) {
> - printk(KERN_ERR "failed to get LCD backlight GPIO\n");
> - goto err1;
> - }
> -
> - gpio_direction_output(enable_gpio, 0);
> - gpio_direction_output(backlight_gpio, 0);
> + r = gpio_request_array(sdp3430_dss_gpios,
> + ARRAY_SIZE(sdp3430_dss_gpios));
> + if (r)
> + printk(KERN_ERR "failed to get LCD control GPIOs\n");
>
> - return;
> -err1:
> - gpio_free(enable_gpio);
> -err0:
> - return;
> }
>
> static 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)
> return -EINVAL;
> }
>
> - gpio_direction_output(enable_gpio, 1);
> - gpio_direction_output(backlight_gpio, 1);
> + gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1);
> + gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1);
>
> lcd_enabled = 1;
>
> @@ -179,8 +164,8 @@ static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
> {
> lcd_enabled = 0;
>
> - gpio_direction_output(enable_gpio, 0);
> - gpio_direction_output(backlight_gpio, 0);
> + gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0);
> + gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0);
> }
>
> static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
> @@ -308,12 +293,10 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
> omap2_hsmmc_init(mmc);
>
> /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
> - gpio_request(gpio + 7, "sub_lcd_en_bkl");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
>
> /* gpio + 15 is "sub_lcd_nRST" (output) */
> - gpio_request(gpio + 15, "sub_lcd_nRST");
> - gpio_direction_output(gpio + 15, 0);
> + gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST");
>
> return 0;
> }
> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
> index 7073542..ae3153c 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 = {
> },
> };
>
> +static struct gpio sdp4430_eth_gpios[] __initdata = {
> + { ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },
> + { ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },
> + { ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
> +};
> +
> static int omap_ethernet_init(void)
> {
> int status;
>
> /* Request of GPIO lines */
> + status = gpio_request_array(sdp4430_eth_gpios,
> + ARRAY_SIZE(sdp4430_eth_gpios));
> + if (status)
> + pr_err("Cannot request ETH GPIOs\n");
>
> - status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
> - return status;
> - }
> -
> - status = gpio_request(ETH_KS8851_QUART, "quart");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
> - goto error1;
> - }
> -
> - status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
> - goto error2;
> - }
> -
> - /* Configuration of requested GPIO lines */
> -
> - status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
> - if (status) {
> - pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
> - goto error3;
> - }
> -
> - status = gpio_direction_output(ETH_KS8851_QUART, 1);
> - if (status) {
> - pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
> - goto error3;
> - }
> -
> - status = gpio_direction_input(ETH_KS8851_IRQ);
> - if (status) {
> - pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
> - goto error3;
> - }
> -
> - return 0;
> -
> -error3:
> - gpio_free(ETH_KS8851_IRQ);
> -error2:
> - gpio_free(ETH_KS8851_QUART);
> -error1:
> - gpio_free(ETH_KS8851_POWER_ON);
> return status;
> }
>
> @@ -602,21 +566,13 @@ static int __init omap4_i2c_init(void)
>
> static void __init omap_sfh7741prox_init(void)
> {
> - int error;
> + int error;
>
> - error = gpio_request(OMAP4_SFH7741_ENABLE_GPIO, "sfh7741");
> - if (error < 0) {
> + error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,
> + GPIOF_OUT_INIT_LOW, "sfh7741");
> + if (error < 0)
> pr_err("%s:failed to request GPIO %d, error %d\n",
> __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> - return;
> - }
> -
> - error = gpio_direction_output(OMAP4_SFH7741_ENABLE_GPIO , 0);
> - if (error < 0) {
> - pr_err("%s: GPIO configuration failed: GPIO %d,error %d\n",
> - __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> - gpio_free(OMAP4_SFH7741_ENABLE_GPIO);
> - }
> }
>
> static void sdp4430_hdmi_mux_init(void)
> @@ -633,27 +589,19 @@ static void sdp4430_hdmi_mux_init(void)
> OMAP_PIN_INPUT_PULLUP);
> }
>
> +static struct gpio sdp4430_hdmi_gpios[] = {
> + { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> + { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> +};
> +
> static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
> {
> int status;
>
> - status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_hpd");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
> - return status;
> - }
> - status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_ls_oe");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
> - goto error1;
> - }
> -
> - return 0;
> -
> -error1:
> - gpio_free(HDMI_GPIO_HPD);
> + status = gpio_request_array(sdp4430_hdmi_gpios,
> + ARRAY_SIZE(sdp4430_hdmi_gpios));
> + if (status)
> + pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
>
> return status;
> }
> diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
> index a890d24..5e438a7 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)
> return;
> }
>
> - ret = gpio_request(GPIO_USB_POWER, "usb_ehci_enable");
> + ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
> + "usb_ehci_enable");
> if (ret < 0) {
> pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
> return;
> }
>
> - ret = gpio_direction_output(GPIO_USB_POWER, 1);
> - if (ret < 0) {
> - gpio_free(GPIO_USB_POWER);
> - pr_err("Unable to initialize EHCI power\n");
> - return;
> - }
> -
> usbhs_init(&usbhs_bdata);
> }
>
> diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
> index ce7d5e6..6c47060 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)
> int r;
>
> omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP);
> - r = gpio_request(GPIO_RTCS35390A_IRQ, "rtcs35390a-irq");
> +
> + r = gpio_request_one(GPIO_RTCS35390A_IRQ, GPIOF_IN, "rtcs35390a-irq");
> if (r < 0) {
> printk(KERN_WARNING "failed to request GPIO#%d\n",
> GPIO_RTCS35390A_IRQ);
> return;
> }
> - r = gpio_direction_input(GPIO_RTCS35390A_IRQ);
> - if (r < 0) {
> - printk(KERN_WARNING "GPIO#%d cannot be configured as input\n",
> - GPIO_RTCS35390A_IRQ);
> - gpio_free(GPIO_RTCS35390A_IRQ);
> - return;
> - }
> +
> am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ);
> }
>
> @@ -242,6 +237,15 @@ static int dvi_enabled;
>
> #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
> defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
> +static struct gpio am3517_evm_dss_gpios[] __initdata = {
> + /* GPIO 182 = LCD Backlight Power */
> + { LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" },
> + /* GPIO 181 = LCD Panel PWM */
> + { LCD_PANEL_PWM, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
> + /* GPIO 176 = LCD Panel Power enable pin */
> + { LCD_PANEL_PWR, GPIOF_OUT_INIT_HIGH, "dvi enable" },
> +};
> +
> static void __init am3517_evm_display_init(void)
> {
> int r;
> @@ -249,41 +253,15 @@ static void __init am3517_evm_display_init(void)
> omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP);
> omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN);
> omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN);
> - /*
> - * Enable GPIO 182 = LCD Backlight Power
> - */
> - r = gpio_request(LCD_PANEL_BKLIGHT_PWR, "lcd_backlight_pwr");
> +
> + r = gpio_request_array(am3517_evm_dss_gpios,
> + ARRAY_SIZE(am3517_evm_dss_gpios));
> if (r) {
> - printk(KERN_ERR "failed to get lcd_backlight_pwr\n");
> + printk(KERN_ERR "failed to get DSS panel control GPIOs\n");
> return;
> }
> - gpio_direction_output(LCD_PANEL_BKLIGHT_PWR, 1);
> - /*
> - * Enable GPIO 181 = LCD Panel PWM
> - */
> - r = gpio_request(LCD_PANEL_PWM, "lcd_pwm");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_pwm\n");
> - goto err_1;
> - }
> - gpio_direction_output(LCD_PANEL_PWM, 1);
> - /*
> - * Enable GPIO 176 = LCD Panel Power enable pin
> - */
> - r = gpio_request(LCD_PANEL_PWR, "lcd_panel_pwr");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_pwr\n");
> - goto err_2;
> - }
> - gpio_direction_output(LCD_PANEL_PWR, 1);
>
> printk(KERN_INFO "Display initialized successfully\n");
> - return;
> -
> -err_2:
> - gpio_free(LCD_PANEL_PWM);
> -err_1:
> - gpio_free(LCD_PANEL_BKLIGHT_PWR);
> }
> #else
> static 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 f4f8374..f3beb8e 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)
> unsigned int rate;
> struct clk *gpmc_fck;
> int eth_cs;
> + int err;
>
> gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
> if (IS_ERR(gpmc_fck)) {
> @@ -245,15 +246,13 @@ static inline void __init apollon_init_smc91x(void)
> apollon_smc91x_resources[0].end = base + 0x30f;
> udelay(100);
>
> - omap_mux_init_gpio(74, 0);
> - if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) {
> + omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0);
> + err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq");
> + if (err) {
> printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
> APOLLON_ETHR_GPIO_IRQ);
> gpmc_cs_free(APOLLON_ETH_CS);
> - goto out;
> }
> - gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
> -
> out:
> clk_disable(gpmc_fck);
> clk_put(gpmc_fck);
> @@ -280,20 +279,19 @@ static void __init omap_apollon_init_early(void)
> omap2_init_common_devices(NULL, NULL);
> }
>
> +static struct gpio apollon_gpio_leds[] __initdata = {
> + { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
> + { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
> + { LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4 */
> +};
> +
> static void __init apollon_led_init(void)
> {
> - /* LED0 - AA10 */
> omap_mux_init_signal("vlynq_clk.gpio_13", 0);
> - gpio_request(LED0_GPIO13, "LED0");
> - gpio_direction_output(LED0_GPIO13, 0);
> - /* LED1 - AA6 */
> omap_mux_init_signal("vlynq_rx1.gpio_14", 0);
> - gpio_request(LED1_GPIO14, "LED1");
> - gpio_direction_output(LED1_GPIO14, 0);
> - /* LED2 - AA4 */
> omap_mux_init_signal("vlynq_rx0.gpio_15", 0);
> - gpio_request(LED2_GPIO15, "LED2");
> - gpio_direction_output(LED2_GPIO15, 0);
> +
> + gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));
> }
>
> static void __init apollon_usb_init(void)
> @@ -301,8 +299,7 @@ static void __init apollon_usb_init(void)
> /* USB device */
> /* DEVICE_SUSPEND */
> omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0);
> - gpio_request(12, "USB suspend");
> - gpio_direction_output(12, 0);
> + gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend");
> omap2_usbfs_init(&apollon_usb_config);
> }
>
> diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
> index e0e2d48..6063be8 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) {}
> #define CM_T35_LCD_BL_GPIO 58
> #define CM_T35_DVI_EN_GPIO 54
>
> -static int lcd_bl_gpio;
> -static int lcd_en_gpio;
> -static int dvi_en_gpio;
> -
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -196,8 +192,8 @@ static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
> return -EINVAL;
> }
>
> - gpio_set_value(lcd_en_gpio, 1);
> - gpio_set_value(lcd_bl_gpio, 1);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
> + gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
>
> lcd_enabled = 1;
>
> @@ -208,8 +204,8 @@ static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
> {
> lcd_enabled = 0;
>
> - gpio_set_value(lcd_bl_gpio, 0);
> - gpio_set_value(lcd_en_gpio, 0);
> + gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
> }
>
> static 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)
> return -EINVAL;
> }
>
> - gpio_set_value(dvi_en_gpio, 0);
> + gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
> dvi_enabled = 1;
>
> return 0;
> @@ -227,7 +223,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
>
> static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
> {
> - gpio_set_value(dvi_en_gpio, 1);
> + gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
> dvi_enabled = 0;
> }
>
> @@ -309,62 +305,38 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
> },
> };
>
> +static struct gpio cm_t35_dss_gpios[] __initdata = {
> + { CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
> + { CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
> + { CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
> +};
> +
> static void __init cm_t35_init_display(void)
> {
> int err;
>
> - lcd_en_gpio = CM_T35_LCD_EN_GPIO;
> - lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
> - dvi_en_gpio = CM_T35_DVI_EN_GPIO;
> -
> spi_register_board_info(cm_t35_lcd_spi_board_info,
> ARRAY_SIZE(cm_t35_lcd_spi_board_info));
>
> - err = gpio_request(lcd_en_gpio, "LCD RST");
> - if (err) {
> - pr_err("CM-T35: failed to get LCD reset GPIO\n");
> - goto out;
> - }
> -
> - err = gpio_request(lcd_bl_gpio, "LCD BL");
> + err = gpio_request_array(cm_t35_dss_gpios,
> + ARRAY_SIZE(cm_t35_dss_gpios));
> if (err) {
> - pr_err("CM-T35: failed to get LCD backlight control GPIO\n");
> - goto err_lcd_bl;
> + pr_err("CM-T35: failed to request DSS control GPIOs\n");
> + return;
> }
>
> - err = gpio_request(dvi_en_gpio, "DVI EN");
> - if (err) {
> - pr_err("CM-T35: failed to get DVI reset GPIO\n");
> - goto err_dvi_en;
> - }
> -
> - gpio_export(lcd_en_gpio, 0);
> - gpio_export(lcd_bl_gpio, 0);
> - gpio_export(dvi_en_gpio, 0);
> - gpio_direction_output(lcd_en_gpio, 0);
> - gpio_direction_output(lcd_bl_gpio, 0);
> - gpio_direction_output(dvi_en_gpio, 1);
> + gpio_export(CM_T35_LCD_EN_GPIO, 0);
> + gpio_export(CM_T35_LCD_BL_GPIO, 0);
> + gpio_export(CM_T35_DVI_EN_GPIO, 0);
>
> msleep(50);
> - gpio_set_value(lcd_en_gpio, 1);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
>
> err = omap_display_init(&cm_t35_dss_data);
> if (err) {
> pr_err("CM-T35: failed to register DSS device\n");
> - goto err_dev_reg;
> + gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
> }
> -
> - return;
> -
> -err_dev_reg:
> - gpio_free(dvi_en_gpio);
> -err_dvi_en:
> - gpio_free(lcd_bl_gpio);
> -err_lcd_bl:
> - gpio_free(lcd_en_gpio);
> -out:
> -
> - return;
> }
>
> static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
> @@ -497,10 +469,8 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
> {
> int wlan_rst = gpio + 2;
>
> - if ((gpio_request(wlan_rst, "WLAN RST") == 0) &&
> - (gpio_direction_output(wlan_rst, 1) == 0)) {
> + if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
> gpio_export(wlan_rst, 0);
> -
> udelay(10);
> gpio_set_value(wlan_rst, 0);
> udelay(10);
> diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
> index a27e3ee..08f08e8 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)
> {
> int err;
>
> - err = gpio_request(RTC_CS_EN_GPIO, "rtc cs en");
> + err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,
> + "rtc cs en");
> if (err) {
> pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);
> return;
> }
>
> - gpio_direction_output(RTC_CS_EN_GPIO, 1);
> -
> platform_device_register(&cm_t3517_rtc_device);
> }
> #else
> @@ -182,11 +181,11 @@ static int cm_t3517_init_usbh(void)
> {
> int err;
>
> - err = gpio_request(USB_HUB_RESET_GPIO, "usb hub rst");
> + err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,
> + "usb hub rst");
> if (err) {
> pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);
> } else {
> - gpio_direction_output(USB_HUB_RESET_GPIO, 0);
> udelay(10);
> gpio_set_value(USB_HUB_RESET_GPIO, 1);
> msleep(1);
> diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
> index 405542a..3bd344a 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,
> /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
> devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
> ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
> - GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN");
> + GPIOF_OUT_INIT_LOW, "LCD_PWREN");
> if (ret < 0) {
> devkit8000_lcd_device.reset_gpio = -EINVAL;
> printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
> @@ -251,7 +251,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
> /* gpio + 7 is "DVI_PD" (out, active low) */
> devkit8000_dvi_device.reset_gpio = gpio + 7;
> ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
> - GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown");
> + GPIOF_OUT_INIT_LOW, "DVI PowerDown");
> if (ret < 0) {
> devkit8000_dvi_device.reset_gpio = -EINVAL;
> printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
> @@ -483,14 +483,14 @@ static void __init omap_dm9000_init(void)
> {
> unsigned char *eth_addr = omap_dm9000_platdata.dev_addr;
> struct omap_die_id odi;
> + int ret;
>
> - if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) {
> + ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq");
> + if (ret < 0) {
> printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n",
> OMAP_DM9000_GPIO_IRQ);
> return;
> - }
> -
> - gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
> + }
>
> /* init the mac address using DIE id */
> omap_get_die_id(&odi);
> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> index 2c9a919..c62c297 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)
>
> omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
>
> - if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_HW0_REV") == 0) &&
> - (gpio_direction_input(IGEP2_GPIO_LED1_RED) == 0)) {
> - ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
> - if (ret == 0) {
> - pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
> - hwrev = IGEP2_BOARD_HWREV_C;
> - } else if (ret == 1) {
> - pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
> - hwrev = IGEP2_BOARD_HWREV_B;
> - } else {
> - pr_err("IGEP2: Unknown Hardware Revision\n");
> - hwrev = -1;
> - }
> - } else {
> + if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {
> pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
> pr_err("IGEP2: Unknown Hardware Revision\n");
> + return;
> + }
> +
> + ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
> + if (ret == 0) {
> + pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
> + hwrev = IGEP2_BOARD_HWREV_C;
> + } else if (ret == 1) {
> + pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
> + hwrev = IGEP2_BOARD_HWREV_B;
> + } else {
> + pr_err("IGEP2: Unknown Hardware Revision\n");
> + hwrev = -1;
> }
>
> gpio_free(IGEP2_GPIO_LED1_RED);
> @@ -339,32 +339,35 @@ static void __init igep2_leds_init(void)
> }
>
> #else
> +static struct gpio igep2_gpio_leds[] __initdata = {
> + { IGEP2_GPIO_LED0_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },
> + { IGEP2_GPIO_LED0_GREEN, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },
> + { IGEP2_GPIO_LED1_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },
> +};
> +
> static inline void igep2_leds_init(void)
> {
> - if ((gpio_request(IGEP2_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED0_RED, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED0_RED, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
> -
> - if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
> -
> - if ((gpio_request(IGEP2_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED1_RED, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED1_RED, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
> + if (gpio_request_array(igep2_gpio_leds, ARRAY_SIZE(igep2_gpio_leds))) {
> + pr_warning("IGEP v2: Could not obtain leds gpios\n");
> + return;
> + }
>
> + gpio_export(IGEP2_GPIO_LED0_RED, 0);
> + gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
> + gpio_export(IGEP2_GPIO_LED1_RED, 0);
> }
> #endif
>
> +static struct gpio igep2_twl_gpios[] = {
> + { -EINVAL, GPIOF_IN, "GPIO_EHCI_NOC" },
> + { -EINVAL, GPIOF_OUT_INIT_LOW, "GPIO_USBH_CPEN" },
> +};
> +
> static int igep2_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> + int ret;
> +
> /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> mmc[0].gpio_cd = gpio + 0;
> omap2_hsmmc_init(mmc);
> @@ -373,22 +376,20 @@ static int igep2_twl_gpio_setup(struct device *dev,
> * REVISIT: need ehci-omap hooks for external VBUS
> * power switch and overcurrent detect
> */
> - if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
> - (gpio_direction_input(gpio + 1) < 0))
> - pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
> + igep2_twl_gpios[0].gpio = gpio + 1;
>
> - /*
> - * TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN
> - * (out, active low)
> - */
> - if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) ||
> - (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
> + /* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN (out, active low) */
> + igep2_twl_gpios[1].gpio = gpio + TWL4030_GPIO_MAX;
> +
> + ret = gpio_request_array(igep2_twl_gpios, ARRAY_SIZE(igep2_twl_gpios));
> + if (ret < 0)
> pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> #if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> - if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
> - && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0))
> + ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
> + "gpio-led:green:d1");
> + if (ret == 0)
> gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> else
> pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n");
> @@ -469,8 +470,9 @@ static struct regulator_init_data igep2_vpll2 = {
>
> static void __init igep2_display_init(void)
> {
> - if (gpio_request(IGEP2_GPIO_DVI_PUP, "GPIO_DVI_PUP") &&
> - gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1))
> + int err = gpio_request_one(IGEP2_GPIO_DVI_PUP, GPIOF_OUT_INIT_HIGH,
> + "GPIO_DVI_PUP");
> + if (err)
> pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
> }
>
> @@ -577,44 +579,43 @@ static struct omap_board_mux board_mux[] __initdata = {
> #endif
>
> #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
> +static struct gpio igep2_wlan_bt_gpios[] __initdata = {
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
> +};
>
> static void __init igep2_wlan_bt_init(void)
> {
> - unsigned npd, wreset, btreset;
> + int err;
>
> /* GPIO's for WLAN-BT combo depends on hardware revision */
> if (hwrev == IGEP2_BOARD_HWREV_B) {
> - npd = IGEP2_RB_GPIO_WIFI_NPD;
> - wreset = IGEP2_RB_GPIO_WIFI_NRESET;
> - btreset = IGEP2_RB_GPIO_BT_NRESET;
> + igep2_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;
> + igep2_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;
> + igep2_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;
> } else if (hwrev == IGEP2_BOARD_HWREV_C) {
> - npd = IGEP2_RC_GPIO_WIFI_NPD;
> - wreset = IGEP2_RC_GPIO_WIFI_NRESET;
> - btreset = IGEP2_RC_GPIO_BT_NRESET;
> + igep2_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;
> + igep2_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;
> + igep2_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;
> } else
> return;
>
> - /* Set GPIO's for WLAN-BT combo module */
> - if ((gpio_request(npd, "GPIO_WIFI_NPD") == 0) &&
> - (gpio_direction_output(npd, 1) == 0)) {
> - gpio_export(npd, 0);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NPD\n");
> -
> - if ((gpio_request(wreset, "GPIO_WIFI_NRESET") == 0) &&
> - (gpio_direction_output(wreset, 1) == 0)) {
> - gpio_export(wreset, 0);
> - gpio_set_value(wreset, 0);
> - udelay(10);
> - gpio_set_value(wreset, 1);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NRESET\n");
> + err = gpio_request_array(igep2_wlan_bt_gpios,
> + ARRAY_SIZE(igep2_wlan_bt_gpios));
> + if (err) {
> + pr_warning("IGEP2: Could not obtain WIFI/BT gpios\n");
> + return;
> + }
> +
> + gpio_export(igep2_wlan_bt_gpios[0].gpio, 0);
> + gpio_export(igep2_wlan_bt_gpios[1].gpio, 0);
> + gpio_export(igep2_wlan_bt_gpios[2].gpio, 0);
> +
> + gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 0);
> + udelay(10);
> + gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 1);
>
> - if ((gpio_request(btreset, "GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(btreset, 1) == 0)) {
> - gpio_export(btreset, 0);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_BT_NRESET\n");
> }
> #else
> static 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 512a7eb..83f6be2 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)
> }
>
> #else
> +static struct gpio igep3_gpio_leds[] __initdata = {
> + { IGEP3_GPIO_LED0_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d0" },
> + { IGEP3_GPIO_LED0_GREEN, GPIOF_OUT_INIT_HIGH, "gpio-led:green:d0" },
> + { IGEP3_GPIO_LED1_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d1" },
> +};
> +
> static inline void igep3_leds_init(void)
> {
> - if ((gpio_request(IGEP3_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED0_RED, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED0_RED, 0);
> - gpio_set_value(IGEP3_GPIO_LED0_RED, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_RED\n");
> -
> - if ((gpio_request(IGEP3_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED0_GREEN, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
> - gpio_set_value(IGEP3_GPIO_LED0_GREEN, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_GREEN\n");
> -
> - if ((gpio_request(IGEP3_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED1_RED, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED1_RED, 0);
> - gpio_set_value(IGEP3_GPIO_LED1_RED, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_RED\n");
> + if (gpio_request_array(igep3_gpio_leds, ARRAY_SIZE(igep3_gpio_leds))) {
> + pr_warning("IGEP3: Could not obtain leds gpios\n");
> + return;
> + }
> + gpio_export(IGEP3_GPIO_LED0_RED, 0);
> + gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
> + gpio_export(IGEP3_GPIO_LED1_RED, 0);
> }
> #endif
>
> static int igep3_twl4030_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> - mmc[0].gpio_cd = gpio + 0;
> - omap2_hsmmc_init(mmc);
> +#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> + int ret;
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> -#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> - if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
> - && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) {
> - gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> - gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
> - } else
> + ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
> + "gpio-led:green:d1");
> + if (ret)
> pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_GREEN\n");
> + else
> + gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> #else
> igep3_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
> #endif
> + /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> + mmc[0].gpio_cd = gpio + 0;
> + omap2_hsmmc_init(mmc);
>
> return 0;
> };
> @@ -358,35 +352,36 @@ static int __init igep3_i2c_init(void)
> }
>
> #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
> +static struct gpio igep3_wlan_bt_gpios[] __initdata = {
> + { IGEP3_GPIO_WIFI_NPD, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
> + { IGEP3_GPIO_WIFI_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
> + { IGEP3_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
> +};
>
> static void __init igep3_wifi_bt_init(void)
> {
> + int err;
> +
> /* Configure MUX values for W-LAN + Bluetooth GPIO's */
> omap_mux_init_gpio(IGEP3_GPIO_WIFI_NPD, OMAP_PIN_OUTPUT);
> omap_mux_init_gpio(IGEP3_GPIO_WIFI_NRESET, OMAP_PIN_OUTPUT);
> omap_mux_init_gpio(IGEP3_GPIO_BT_NRESET, OMAP_PIN_OUTPUT);
>
> /* Set GPIO's for W-LAN + Bluetooth combo module */
> - if ((gpio_request(IGEP3_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_WIFI_NPD, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NPD\n");
> -
> - if ((gpio_request(IGEP3_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_WIFI_NRESET, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
> - gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
> - udelay(10);
> - gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NRESET\n");
> -
> - if ((gpio_request(IGEP3_GPIO_BT_NRESET, "GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_BT_NRESET, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_BT_NRESET, 0);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_BT_NRESET\n");
> + err = gpio_request_array(igep3_wlan_bt_gpios,
> + ARRAY_SIZE(igep3_wlan_bt_gpios));
> + if (err) {
> + pr_warning("IGEP3: Could not obtain WIFI/BT gpios\n");
> + return;
> + }
> +
> + gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
> + gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
> + gpio_export(IGEP3_GPIO_BT_NRESET, 0);
> +
> + gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
> + udelay(10);
> + gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
> }
> #else
> void __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 e710cd9..8d74318 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)
> static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
>
> /* PM companion chip power control pin */
> - ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable");
> + ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW,
> + "TUSB6010 enable");
> if (ret != 0) {
> printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
> TUSB6010_GPIO_ENABLE);
> return;
> }
> - gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
> -
> tusb_set_power(0);
>
> ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
> @@ -494,8 +493,12 @@ static struct omap_mmc_platform_data mmc1_data = {
>
> static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
>
> -static void __init n8x0_mmc_init(void)
> +static struct gpio n810_emmc_gpios[] __initdata = {
> + { N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" },
> + { N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" },
> +};
>
> +static void __init n8x0_mmc_init(void)
> {
> int err;
>
> @@ -512,27 +515,18 @@ static void __init n8x0_mmc_init(void)
> mmc1_data.slots[1].ban_openended = 1;
> }
>
> - err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch");
> + err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW,
> + "MMC slot switch");
> if (err)
> return;
>
> - gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0);
> -
> if (machine_is_nokia_n810()) {
> - err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf");
> - if (err) {
> - gpio_free(N8X0_SLOT_SWITCH_GPIO);
> - return;
> - }
> - gpio_direction_output(N810_EMMC_VSD_GPIO, 0);
> -
> - err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd");
> + err = gpio_request_array(n810_emmc_gpios,
> + ARRAY_SIZE(n810_emmc_gpios));
> if (err) {
> gpio_free(N8X0_SLOT_SWITCH_GPIO);
> - gpio_free(N810_EMMC_VSD_GPIO);
> return;
> }
> - gpio_direction_output(N810_EMMC_VIO_GPIO, 0);
> }
>
> mmc_data[0] = &mmc1_data;
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index bc30ab0..3ff3a2c 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)
> return omap3_beagle_version;
> }
>
> +static struct gpio omap3_beagle_rev_gpios[] __initdata = {
> + { 171, GPIOF_IN, "rev_id_0" },
> + { 172, GPIOF_IN, "rev_id_1" },
> + { 173, GPIOF_IN, "rev_id_2" },
> +};
> +
> static void __init omap3_beagle_init_rev(void)
> {
> int ret;
> @@ -89,21 +95,13 @@ static void __init omap3_beagle_init_rev(void)
> omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
> omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
>
> - ret = gpio_request(171, "rev_id_0");
> - if (ret < 0)
> - goto fail0;
> -
> - ret = gpio_request(172, "rev_id_1");
> - if (ret < 0)
> - goto fail1;
> -
> - ret = gpio_request(173, "rev_id_2");
> - if (ret < 0)
> - goto fail2;
> -
> - gpio_direction_input(171);
> - gpio_direction_input(172);
> - gpio_direction_input(173);
> + ret = gpio_request_array(omap3_beagle_rev_gpios,
> + ARRAY_SIZE(omap3_beagle_rev_gpios));
> + if (ret < 0) {
> + printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
> + omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> + return;
> + }
>
> beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
> | (gpio_get_value(173) << 2);
> @@ -129,18 +127,6 @@ static void __init omap3_beagle_init_rev(void)
> printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
> omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> }
> -
> - return;
> -
> -fail2:
> - gpio_free(172);
> -fail1:
> - gpio_free(171);
> -fail0:
> - printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
> - omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> -
> - return;
> }
>
> static struct mtd_partition omap3beagle_nand_partitions[] = {
> @@ -235,13 +221,10 @@ static void __init beagle_display_init(void)
> {
> int r;
>
> - r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
> - if (r < 0) {
> + r = gpio_request_one(beagle_dvi_device.reset_gpio, GPIOF_OUT_INIT_LOW,
> + "DVI reset");
> + if (r < 0)
> printk(KERN_ERR "Unable to get DVI reset GPIO\n");
> - return;
> - }
> -
> - gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
> }
>
> #include "sdram-micron-mt46h32m32lf-6.h"
> @@ -268,7 +251,7 @@ static struct gpio_led gpio_leds[];
> static int beagle_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - int r;
> + int r, usb_pwr_level;
>
> if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> mmc[0].gpio_wp = -EINVAL;
> @@ -287,66 +270,46 @@ static int beagle_twl_gpio_setup(struct device *dev,
> beagle_vmmc1_supply.dev = mmc[0].dev;
> beagle_vsim_supply.dev = mmc[0].dev;
>
> - /* REVISIT: need ehci-omap hooks for external VBUS
> - * power switch and overcurrent detect
> - */
> - if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
> - r = gpio_request(gpio + 1, "EHCI_nOC");
> - if (!r) {
> - r = gpio_direction_input(gpio + 1);
> - if (r)
> - gpio_free(gpio + 1);
> - }
> - if (r)
> - pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> - }
> -
> /*
> * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
> * high / others active low)
> - */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> - if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
> - else
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> -
> - /* DVI reset GPIO is different between beagle revisions */
> - if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
> - beagle_dvi_device.reset_gpio = 129;
> - else
> - beagle_dvi_device.reset_gpio = 170;
> -
> - /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> - gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> -
> - /*
> - * gpio + 1 on Xm controls the TFP410's enable line (active low)
> - * gpio + 2 control varies depending on the board rev as follows:
> - * P7/P8 revisions(prototype): Camera EN
> - * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
> + * DVI reset GPIO is different between beagle revisions
> */
> if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> - r = gpio_request(gpio + 1, "nDVI_PWR_EN");
> - if (!r) {
> - r = gpio_direction_output(gpio + 1, 0);
> - if (r)
> - gpio_free(gpio + 1);
> - }
> + usb_pwr_level = GPIOF_OUT_INIT_HIGH;
> + beagle_dvi_device.reset_gpio = 129;
> + /*
> + * gpio + 1 on Xm controls the TFP410's enable line (active low)
> + * gpio + 2 control varies depending on the board rev as below:
> + * P7/P8 revisions(prototype): Camera EN
> + * A2+ revisions (production): LDO (DVI, serial, led blocks)
> + */
> + r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW,
> + "nDVI_PWR_EN");
> if (r)
> pr_err("%s: unable to configure nDVI_PWR_EN\n",
> __func__);
> - r = gpio_request(gpio + 2, "DVI_LDO_EN");
> - if (!r) {
> - r = gpio_direction_output(gpio + 2, 1);
> - if (r)
> - gpio_free(gpio + 2);
> - }
> + r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
> + "DVI_LDO_EN");
> if (r)
> pr_err("%s: unable to configure DVI_LDO_EN\n",
> __func__);
> + } else {
> + usb_pwr_level = GPIOF_OUT_INIT_LOW;
> + beagle_dvi_device.reset_gpio = 170;
> + /*
> + * REVISIT: need ehci-omap hooks for external VBUS
> + * power switch and overcurrent detect
> + */
> + if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
> + pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> }
>
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
> +
> + /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> + gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> +
> return 0;
> }
>
> @@ -608,9 +571,8 @@ static void __init omap3_beagle_init(void)
> omap_serial_init();
>
> omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> - gpio_request(170, "DVI_nPD");
> /* REVISIT leave DVI powered down until it's needed ... */
> - gpio_direction_output(170, true);
> + gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
>
> usb_musb_init(NULL);
> usbhs_init(&usbhs_bdata);
> diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
> index 5066b0b..02e1ad2 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; }
> #define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
> #define OMAP3EVM_DVI_PANEL_EN_GPIO 199
>
> +static struct gpio omap3_evm_dss_gpios[] __initdata = {
> + { OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
> + { OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
> + { OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
> + { OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
> + { OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
> + { OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
> +};
> +
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -156,61 +165,10 @@ static void __init omap3_evm_display_init(void)
> {
> int r;
>
> - r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_resb\n");
> - return;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_ini\n");
> - goto err_1;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_qvga\n");
> - goto err_2;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_lr\n");
> - goto err_3;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_ud\n");
> - goto err_4;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_envdd\n");
> - goto err_5;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
> -
> - return;
> -
> -err_5:
> - gpio_free(OMAP3EVM_LCD_PANEL_UD);
> -err_4:
> - gpio_free(OMAP3EVM_LCD_PANEL_LR);
> -err_3:
> - gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
> -err_2:
> - gpio_free(OMAP3EVM_LCD_PANEL_INI);
> -err_1:
> - gpio_free(OMAP3EVM_LCD_PANEL_RESB);
> -
> + r = gpio_request_array(omap3_evm_dss_gpios,
> + ARRAY_SIZE(omap3_evm_dss_gpios));
> + if (r)
> + printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
> }
>
> static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
> @@ -400,7 +358,7 @@ static struct platform_device leds_gpio = {
> static int omap3evm_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - int r;
> + int r, lcd_bl_en;
>
> /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> omap_mux_init_gpio(63, OMAP_PIN_INPUT);
> @@ -417,16 +375,14 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
> */
>
> /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
> - r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
> - if (!r)
> - r = gpio_direction_output(gpio + TWL4030_GPIO_MAX,
> - (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
> + lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
> + GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
> + r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
> if (r)
> printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
>
> /* gpio + 7 == DVI Enable */
> - gpio_request(gpio + 7, "EN_DVI");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> @@ -717,6 +673,11 @@ static struct omap_musb_board_data musb_board_data = {
> .power = 100,
> };
>
> +static struct gpio omap3_evm_ehci_gpios[] __initdata = {
> + { OMAP3_EVM_EHCI_VBUS, GPIOF_OUT_INIT_HIGH, "enable EHCI VBUS" },
> + { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" },
> +};
> +
> static void __init omap3_evm_init(void)
> {
> omap3_evm_get_revision();
> @@ -740,16 +701,12 @@ static void __init omap3_evm_init(void)
>
> if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
> /* enable EHCI VBUS using GPIO22 */
> - omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP);
> - gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
> - gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
> - gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
> -
> + omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
> /* Select EHCI port on main board */
> - omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP);
> - gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port");
> - gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0);
> - gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0);
> + omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
> + OMAP_PIN_INPUT_PULLUP);
> + gpio_request_array(omap3_evm_ehci_gpios,
> + ARRAY_SIZE(omap3_evm_ehci_gpios));
>
> /* setup EHCI phy reset config */
> 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 6c22d3f..78dd2a7 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,
>
> /* gpio + 13 drives 32kHz buffer for wifi module */
> gpio_32khz = gpio + 13;
> - ret = gpio_request(gpio_32khz, "wifi 32kHz");
> + ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz");
> if (ret < 0) {
> pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret);
> - goto fail;
> - }
> -
> - ret = gpio_direction_output(gpio_32khz, 1);
> - if (ret < 0) {
> - pr_err("Cannot set GPIO line %d, ret=%d\n", gpio_32khz, ret);
> - goto fail_direction;
> + return -ENODEV;
> }
>
> return 0;
> -
> -fail_direction:
> - gpio_free(gpio_32khz);
> -fail:
> - return -ENODEV;
> }
>
> static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
> @@ -584,14 +573,10 @@ static void __init pandora_wl1251_init(void)
>
> memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
>
> - ret = gpio_request(PANDORA_WIFI_IRQ_GPIO, "wl1251 irq");
> + ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
> if (ret < 0)
> goto fail;
>
> - ret = gpio_direction_input(PANDORA_WIFI_IRQ_GPIO);
> - if (ret < 0)
> - goto fail_irq;
> -
> pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
> if (pandora_wl1251_pdata.irq < 0)
> goto fail_irq;
> diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
> index 9981d06..085c60a 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,
> */
>
> /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
> + "EN_LCD_BKL");
>
> /* gpio + 7 == DVI Enable */
> - gpio_request(gpio + 7, "EN_DVI");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */
> 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 392278d..82872d7 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,
> /* REVISIT: need ehci-omap hooks for external VBUS
> * power switch and overcurrent detect
> */
> -
> - gpio_request(gpio + 1, "EHCI_nOC");
> - gpio_direction_input(gpio + 1);
> + gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC");
>
> /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
> + "nEN_USB_PWR");
>
> /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> @@ -401,15 +399,10 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
>
> static void omap3_touchbook_poweroff(void)
> {
> - int r;
> + int pwr_off = TB_KILL_POWER_GPIO;
>
> - r = gpio_request(TB_KILL_POWER_GPIO, "DVI reset");
> - if (r < 0) {
> + if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "DVI reset") < 0)
> printk(KERN_ERR "Unable to get kill power GPIO\n");
> - return;
> - }
> -
> - gpio_direction_output(TB_KILL_POWER_GPIO, 0);
> }
>
> static int __init early_touchbook_revision(char *p)
> @@ -435,9 +428,8 @@ static void __init omap3_touchbook_init(void)
> omap_serial_init();
>
> omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> - gpio_request(176, "DVI_nPD");
> /* REVISIT leave DVI powered down until it's needed ... */
> - gpio_direction_output(176, true);
> + gpio_request_one(176, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
>
> /* Touchscreen and accelerometer */
> 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 7eaad62..5d7c0a3 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 = {
> .reset_gpio_port[2] = -EINVAL
> };
>
> +static struct gpio panda_ehci_gpios[] __initdata = {
> + { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" },
> + { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" },
> +};
> +
> static void __init omap4_ehci_init(void)
> {
> int ret;
> @@ -121,44 +126,27 @@ static void __init omap4_ehci_init(void)
> phy_ref_clk = clk_get(NULL, "auxclk3_ck");
> if (IS_ERR(phy_ref_clk)) {
> pr_err("Cannot request auxclk3\n");
> - goto error1;
> + return;
> }
> clk_set_rate(phy_ref_clk, 19200000);
> clk_enable(phy_ref_clk);
>
> - /* disable the power to the usb hub prior to init */
> - ret = gpio_request(GPIO_HUB_POWER, "hub_power");
> + /* disable the power to the usb hub prior to init and reset phy+hub */
> + ret = gpio_request_array(panda_ehci_gpios,
> + ARRAY_SIZE(panda_ehci_gpios));
> if (ret) {
> - pr_err("Cannot request GPIO %d\n", GPIO_HUB_POWER);
> - goto error1;
> + pr_err("Unable to initialize EHCI power/reset\n");
> + return;
> }
> - gpio_export(GPIO_HUB_POWER, 0);
> - gpio_direction_output(GPIO_HUB_POWER, 0);
> - gpio_set_value(GPIO_HUB_POWER, 0);
>
> - /* reset phy+hub */
> - ret = gpio_request(GPIO_HUB_NRESET, "hub_nreset");
> - if (ret) {
> - pr_err("Cannot request GPIO %d\n", GPIO_HUB_NRESET);
> - goto error2;
> - }
> + gpio_export(GPIO_HUB_POWER, 0);
> gpio_export(GPIO_HUB_NRESET, 0);
> - gpio_direction_output(GPIO_HUB_NRESET, 0);
> - gpio_set_value(GPIO_HUB_NRESET, 0);
> gpio_set_value(GPIO_HUB_NRESET, 1);
>
> usbhs_init(&usbhs_bdata);
>
> /* enable power to hub */
> gpio_set_value(GPIO_HUB_POWER, 1);
> - return;
> -
> -error2:
> - gpio_free(GPIO_HUB_POWER);
> -error1:
> - pr_err("Unable to initialize EHCI power/reset\n");
> - return;
> -
> }
>
> static struct omap_musb_board_data musb_board_data = {
> @@ -638,27 +626,19 @@ static void omap4_panda_hdmi_mux_init(void)
> OMAP_PIN_INPUT_PULLUP);
> }
>
> +static struct gpio panda_hdmi_gpios[] = {
> + { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> + { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> +};
> +
> static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
> {
> int status;
>
> - status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_hpd");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
> - return status;
> - }
> - status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_ls_oe");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
> - goto error1;
> - }
> -
> - return 0;
> -
> -error1:
> - gpio_free(HDMI_GPIO_HPD);
> + status = gpio_request_array(panda_hdmi_gpios,
> + ARRAY_SIZE(panda_hdmi_gpios));
> + if (status)
> + pr_err("Cannot request HDMI GPIOs\n");
>
> return status;
> }
> diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
> index e152c13..c03f92b 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;
> #define OVERO_GPIO_LCD_EN 144
> #define OVERO_GPIO_LCD_BL 145
>
> +static struct gpio overo_dss_gpios[] __initdata = {
> + { OVERO_GPIO_LCD_EN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_EN" },
> + { OVERO_GPIO_LCD_BL, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_BL" },
> +};
> +
> static void __init overo_display_init(void)
> {
> - if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0))
> - gpio_export(OVERO_GPIO_LCD_EN, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_LCD_EN\n");
> + if (gpio_request_array(overo_dss_gpios, ARRAY_SIZE(overo_dss_gpios))) {
> + printk(KERN_ERR "could not obtain DSS control GPIOs\n");
> + return;
> + }
>
> - if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0))
> - gpio_export(OVERO_GPIO_LCD_BL, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_LCD_BL\n");
> + gpio_export(OVERO_GPIO_LCD_EN, 0);
> + gpio_export(OVERO_GPIO_LCD_BL, 0);
> }
>
> static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
> @@ -553,8 +552,15 @@ static struct omap_board_mux board_mux[] __initdata = {
> };
> #endif
>
> +static struct gpio overo_bt_gpios[] __initdata = {
> + { OVERO_GPIO_BT_XGATE, GPIOF_OUT_INIT_LOW, "lcd enable" },
> + { OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
> +};
> +
> static void __init overo_init(void)
> {
> + int ret;
> +
> omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> overo_i2c_init();
> omap_display_init(&overo_dss_data);
> @@ -574,9 +580,9 @@ static void __init overo_init(void)
> omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
> omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
>
> - if ((gpio_request(OVERO_GPIO_W2W_NRESET,
> - "OVERO_GPIO_W2W_NRESET") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) {
> + ret = gpio_request_one(OVERO_GPIO_W2W_NRESET, GPIOF_OUT_INIT_HIGH,
> + "OVERO_GPIO_W2W_NRESET");
> + if (ret == 0) {
> gpio_export(OVERO_GPIO_W2W_NRESET, 0);
> gpio_set_value(OVERO_GPIO_W2W_NRESET, 0);
> udelay(10);
> @@ -586,25 +592,20 @@ static void __init overo_init(void)
> "OVERO_GPIO_W2W_NRESET\n");
> }
>
> - if ((gpio_request(OVERO_GPIO_BT_XGATE, "OVERO_GPIO_BT_XGATE") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_BT_XGATE, 0) == 0))
> + ret = gpio_request_array(overo_bt_gpios, ARRAY_SIZE(overo_bt_gpios));
> + if (ret) {
> + pr_err("%s: could not obtain BT gpios\n", __func__);
> + } else {
> gpio_export(OVERO_GPIO_BT_XGATE, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for OVERO_GPIO_BT_XGATE\n");
> -
> - if ((gpio_request(OVERO_GPIO_BT_NRESET, "OVERO_GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_BT_NRESET, 1) == 0)) {
> gpio_export(OVERO_GPIO_BT_NRESET, 0);
> gpio_set_value(OVERO_GPIO_BT_NRESET, 0);
> mdelay(6);
> gpio_set_value(OVERO_GPIO_BT_NRESET, 1);
> - } else {
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_BT_NRESET\n");
> }
>
> - if ((gpio_request(OVERO_GPIO_USBH_CPEN, "OVERO_GPIO_USBH_CPEN") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_USBH_CPEN, 1) == 0))
> + ret = gpio_request_one(OVERO_GPIO_USBH_CPEN, GPIOF_OUT_INIT_HIGH,
> + "OVERO_GPIO_USBH_CPEN");
> + if (ret == 0)
> gpio_export(OVERO_GPIO_USBH_CPEN, 0);
> else
> 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 a5bf5e9..2e509f9 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)
> static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
> {
> /* FIXME this gpio setup is just a placeholder for now */
> - gpio_request(gpio + 6, "backlight_pwm");
> - gpio_direction_output(gpio + 6, 0);
> - gpio_request(gpio + 7, "speaker_en");
> - gpio_direction_output(gpio + 7, 1);
> + gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_HIGH, "speaker_en");
>
> return 0;
> }
> @@ -912,26 +910,20 @@ static void rx51_wl1251_set_power(bool enable)
> gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
> }
>
> +static struct gpio rx51_wl1251_gpios[] __initdata = {
> + { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW, "wl1251 power" },
> + { RX51_WL1251_IRQ_GPIO, GPIOF_IN, "wl1251 irq" },
> +};
> +
> static void __init rx51_init_wl1251(void)
> {
> int irq, ret;
>
> - ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power");
> + ret = gpio_request_array(rx51_wl1251_gpios,
> + ARRAY_SIZE(rx51_wl1251_gpios));
> if (ret < 0)
> goto error;
>
> - ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
> - if (ret < 0)
> - goto err_power;
> -
> - ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
> - if (ret < 0)
> - goto err_power;
> -
> - ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
> - if (ret < 0)
> - goto err_irq;
> -
> irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
> if (irq < 0)
> goto err_irq;
> @@ -943,10 +935,7 @@ static void __init rx51_init_wl1251(void)
>
> err_irq:
> gpio_free(RX51_WL1251_IRQ_GPIO);
> -
> -err_power:
> gpio_free(RX51_WL1251_POWER_GPIO);
> -
> error:
> printk(KERN_ERR "wl1251 board initialisation failed\n");
> 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 89a66db..1977733 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)
> return 0;
> }
>
> - if (gpio_request(RX51_LCD_RESET_GPIO, "LCD ACX565AKM reset")) {
> + if (gpio_request_one(RX51_LCD_RESET_GPIO, GPIOF_OUT_INIT_HIGH,
> + "LCD ACX565AKM reset")) {
> pr_err("%s failed to get LCD Reset GPIO\n", __func__);
> return 0;
> }
>
> - gpio_direction_output(RX51_LCD_RESET_GPIO, 1);
> -
> omap_display_init(&rx51_dss_board_info);
> return 0;
> }
> diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
> index 2ee9ab9..6402e78 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)
>
> quart_gpio = ZOOM_QUADUART_GPIO;
>
> - if (gpio_request(quart_gpio, "TL16CP754C GPIO") < 0) {
> + if (gpio_request_one(quart_gpio, GPIOF_IN, "TL16CP754C GPIO") < 0)
> printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n",
> quart_gpio);
> - return;
> - }
> - gpio_direction_input(quart_gpio);
> }
>
> static inline int omap_zoom_debugboard_detect(void)
> @@ -92,12 +89,12 @@ static inline int omap_zoom_debugboard_detect(void)
>
> debug_board_detect = ZOOM_SMSC911X_GPIO;
>
> - if (gpio_request(debug_board_detect, "Zoom debug board detect") < 0) {
> + if (gpio_request_one(debug_board_detect, GPIOF_IN,
> + "Zoom debug board detect") < 0) {
> printk(KERN_ERR "Failed to request GPIO%d for Zoom debug"
> "board detect\n", debug_board_detect);
> return 0;
> }
> - gpio_direction_input(debug_board_detect);
>
> if (!gpio_get_value(debug_board_detect)) {
> ret = 0;
> diff --git a/arch/arm/mach-omap2/board-zoom-display.c b/arch/arm/mach-omap2/board-zoom-display.c
> index 37b84c2..ce53e82 100644
> --- a/arch/arm/mach-omap2/board-zoom-display.c
> +++ b/arch/arm/mach-omap2/board-zoom-display.c
> @@ -21,34 +21,19 @@
> #define LCD_PANEL_RESET_GPIO_PILOT 55
> #define LCD_PANEL_QVGA_GPIO 56
>
> +static struct gpio zoom_lcd_gpios[] __initdata = {
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "lcd reset" },
> + { LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" },
> +};
> +
> static void zoom_lcd_panel_init(void)
> {
> - int ret;
> - unsigned char lcd_panel_reset_gpio;
> -
> - lcd_panel_reset_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
> + zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
> LCD_PANEL_RESET_GPIO_PROD :
> LCD_PANEL_RESET_GPIO_PILOT;
>
> - ret = gpio_request(lcd_panel_reset_gpio, "lcd reset");
> - if (ret) {
> - pr_err("Failed to get LCD reset GPIO (gpio%d).\n",
> - lcd_panel_reset_gpio);
> - return;
> - }
> - gpio_direction_output(lcd_panel_reset_gpio, 1);
> -
> - ret = gpio_request(LCD_PANEL_QVGA_GPIO, "lcd qvga");
> - if (ret) {
> - pr_err("Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n",
> - LCD_PANEL_QVGA_GPIO);
> - goto err0;
> - }
> - gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
> -
> - return;
> -err0:
> - gpio_free(lcd_panel_reset_gpio);
> + if (gpio_request_array(zoom_lcd_gpios, ARRAY_SIZE(zoom_lcd_gpios)))
> + pr_err("%s: Failed to get LCD GPIOs.\n", __func__);
> }
>
> static 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 489294a..118c6f5 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,
> zoom_vsim_supply.dev = mmc[0].dev;
> zoom_vmmc2_supply.dev = mmc[1].dev;
>
> - ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable");
> - if (ret) {
> + ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
> + "lcd enable");
> + if (ret)
> pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
> LCD_PANEL_ENABLE_GPIO);
> - return ret;
> - }
> - gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
>
> return ret;
> }
> diff --git a/arch/arm/mach-omap2/gpmc-smc91x.c b/arch/arm/mach-omap2/gpmc-smc91x.c
> index 877c6f5..ba10c24 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)
> goto free1;
> }
>
> - if (gpio_request(gpmc_cfg->gpio_irq, "SMC91X irq") < 0)
> + if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "SMC91X irq") < 0)
> goto free1;
>
> - gpio_direction_input(gpmc_cfg->gpio_irq);
> gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
>
> if (gpmc_cfg->gpio_pwrdwn) {
> - ret = gpio_request(gpmc_cfg->gpio_pwrdwn, "SMC91X powerdown");
> + ret = gpio_request_one(gpmc_cfg->gpio_pwrdwn,
> + GPIOF_OUT_INIT_LOW, "SMC91X powerdown");
> if (ret)
> goto free2;
> - gpio_direction_output(gpmc_cfg->gpio_pwrdwn, 0);
> }
>
> if (gpmc_cfg->gpio_reset) {
> - ret = gpio_request(gpmc_cfg->gpio_reset, "SMC91X reset");
> + ret = gpio_request_one(gpmc_cfg->gpio_reset,
> + GPIOF_OUT_INIT_LOW, "SMC91X reset");
> if (ret)
> goto free3;
>
> - gpio_direction_output(gpmc_cfg->gpio_reset, 0);
> gpio_set_value(gpmc_cfg->gpio_reset, 1);
> msleep(100);
> 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 e09374a..9970331 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)
> gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0;
> gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff;
>
> - if (gpio_request(gpmc_cfg->gpio_irq, "smsc911x irq") < 0) {
> + if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "smsc911x irq")) {
> pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq);
> goto free1;
> }
>
> - gpio_direction_input(gpmc_cfg->gpio_irq);
> gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
>
> if (gpio_is_valid(gpmc_cfg->gpio_reset)) {
> - ret = gpio_request(gpmc_cfg->gpio_reset, "smsc911x reset");
> + ret = gpio_request_one(gpmc_cfg->gpio_reset,
> + GPIOF_OUT_INIT_HIGH, "smsc911x reset");
> if (ret) {
> pr_err("Failed to request reset GPIO%d\n",
> gpmc_cfg->gpio_reset);
> goto free2;
> }
>
> - gpio_direction_output(gpmc_cfg->gpio_reset, 1);
> gpio_set_value(gpmc_cfg->gpio_reset, 0);
> msleep(100);
> 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 8a3c05f..8dd26b7 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,
> );
>
> /* IRQ */
> - status = gpio_request(irq, "TUSB6010 irq");
> + status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq");
> if (status < 0) {
> printk(error, 3, status);
> return status;
> }
> - gpio_direction_input(irq);
> tusb_resources[2].start = irq + IH_GPIO_BASE;
>
> /* set up memory timings ... can speed them up later */
--
Regards,
Igor.
WARNING: multiple messages have this Message-ID (diff)
From: grinberg@compulab.co.il (Igor Grinberg)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] arm: omap2plus: GPIO cleanup
Date: Wed, 11 May 2011 10:38:42 +0300 [thread overview]
Message-ID: <4DCA3D02.9070608@compulab.co.il> (raw)
In-Reply-To: <1304436129-7165-1-git-send-email-grinberg@compulab.co.il>
ping!
On 05/03/11 18:22, Igor Grinberg wrote:
> use gpio_request_<one|array>() instead of multiple gpiolib calls,
> remove unneeded variables, etc.
>
> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
> ---
> Boot tested on cm-t35 and compile tested for others.
>
> v2: rebased on top of Tony's devel-cleanup
>
>
> arch/arm/mach-omap2/board-2430sdp.c | 7 +-
> arch/arm/mach-omap2/board-3430sdp.c | 47 +++------
> arch/arm/mach-omap2/board-4430sdp.c | 98 ++++--------------
> arch/arm/mach-omap2/board-am3517crane.c | 10 +--
> arch/arm/mach-omap2/board-am3517evm.c | 54 +++-------
> arch/arm/mach-omap2/board-apollon.c | 29 +++---
> arch/arm/mach-omap2/board-cm-t35.c | 74 ++++---------
> arch/arm/mach-omap2/board-cm-t3517.c | 9 +-
> arch/arm/mach-omap2/board-devkit8000.c | 12 +-
> arch/arm/mach-omap2/board-igep0020.c | 143 +++++++++++++-------------
> arch/arm/mach-omap2/board-igep0030.c | 93 ++++++++---------
> arch/arm/mach-omap2/board-n8x0.c | 28 ++---
> arch/arm/mach-omap2/board-omap3beagle.c | 128 ++++++++---------------
> arch/arm/mach-omap2/board-omap3evm.c | 99 +++++-------------
> arch/arm/mach-omap2/board-omap3pandora.c | 21 +---
> arch/arm/mach-omap2/board-omap3stalker.c | 7 +-
> arch/arm/mach-omap2/board-omap3touchbook.c | 20 +---
> arch/arm/mach-omap2/board-omap4panda.c | 62 ++++--------
> arch/arm/mach-omap2/board-overo.c | 55 +++++-----
> arch/arm/mach-omap2/board-rx51-peripherals.c | 29 ++----
> arch/arm/mach-omap2/board-rx51-video.c | 5 +-
> arch/arm/mach-omap2/board-zoom-debugboard.c | 9 +-
> arch/arm/mach-omap2/board-zoom-display.c | 31 ++----
> arch/arm/mach-omap2/board-zoom-peripherals.c | 8 +-
> arch/arm/mach-omap2/gpmc-smc91x.c | 11 +-
> arch/arm/mach-omap2/gpmc-smsc911x.c | 7 +-
> arch/arm/mach-omap2/usb-tusb6010.c | 3 +-
> 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 a8810f8..d54969b 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 = {
>
> static void __init omap_2430sdp_init(void)
> {
> - int ret;
> -
> omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
>
> omap_board_config = sdp2430_config;
> @@ -246,9 +244,8 @@ static void __init omap_2430sdp_init(void)
> board_smc91x_init();
>
> /* Turn off secondary LCD backlight */
> - ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight");
> - if (ret == 0)
> - gpio_direction_output(SECONDARY_LCD_GPIO, 0);
> + gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
> + "Secondary LCD backlight");
> }
>
> static 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 951e585..99218a5 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 = {
> #define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
> #define SDP3430_LCD_PANEL_ENABLE_GPIO 5
>
> -static unsigned backlight_gpio;
> -static unsigned enable_gpio;
> +static struct gpio sdp3430_dss_gpios[] __initdata = {
> + {SDP3430_LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, "LCD reset" },
> + {SDP3430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, "LCD Backlight"},
> +};
> +
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -135,29 +138,11 @@ static void __init sdp3430_display_init(void)
> {
> int r;
>
> - enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO;
> - backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
> -
> - r = gpio_request(enable_gpio, "LCD reset");
> - if (r) {
> - printk(KERN_ERR "failed to get LCD reset GPIO\n");
> - goto err0;
> - }
> -
> - r = gpio_request(backlight_gpio, "LCD Backlight");
> - if (r) {
> - printk(KERN_ERR "failed to get LCD backlight GPIO\n");
> - goto err1;
> - }
> -
> - gpio_direction_output(enable_gpio, 0);
> - gpio_direction_output(backlight_gpio, 0);
> + r = gpio_request_array(sdp3430_dss_gpios,
> + ARRAY_SIZE(sdp3430_dss_gpios));
> + if (r)
> + printk(KERN_ERR "failed to get LCD control GPIOs\n");
>
> - return;
> -err1:
> - gpio_free(enable_gpio);
> -err0:
> - return;
> }
>
> static 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)
> return -EINVAL;
> }
>
> - gpio_direction_output(enable_gpio, 1);
> - gpio_direction_output(backlight_gpio, 1);
> + gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1);
> + gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1);
>
> lcd_enabled = 1;
>
> @@ -179,8 +164,8 @@ static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
> {
> lcd_enabled = 0;
>
> - gpio_direction_output(enable_gpio, 0);
> - gpio_direction_output(backlight_gpio, 0);
> + gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0);
> + gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0);
> }
>
> static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
> @@ -308,12 +293,10 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
> omap2_hsmmc_init(mmc);
>
> /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
> - gpio_request(gpio + 7, "sub_lcd_en_bkl");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
>
> /* gpio + 15 is "sub_lcd_nRST" (output) */
> - gpio_request(gpio + 15, "sub_lcd_nRST");
> - gpio_direction_output(gpio + 15, 0);
> + gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST");
>
> return 0;
> }
> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
> index 7073542..ae3153c 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 = {
> },
> };
>
> +static struct gpio sdp4430_eth_gpios[] __initdata = {
> + { ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },
> + { ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },
> + { ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
> +};
> +
> static int omap_ethernet_init(void)
> {
> int status;
>
> /* Request of GPIO lines */
> + status = gpio_request_array(sdp4430_eth_gpios,
> + ARRAY_SIZE(sdp4430_eth_gpios));
> + if (status)
> + pr_err("Cannot request ETH GPIOs\n");
>
> - status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
> - return status;
> - }
> -
> - status = gpio_request(ETH_KS8851_QUART, "quart");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
> - goto error1;
> - }
> -
> - status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
> - goto error2;
> - }
> -
> - /* Configuration of requested GPIO lines */
> -
> - status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
> - if (status) {
> - pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
> - goto error3;
> - }
> -
> - status = gpio_direction_output(ETH_KS8851_QUART, 1);
> - if (status) {
> - pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
> - goto error3;
> - }
> -
> - status = gpio_direction_input(ETH_KS8851_IRQ);
> - if (status) {
> - pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
> - goto error3;
> - }
> -
> - return 0;
> -
> -error3:
> - gpio_free(ETH_KS8851_IRQ);
> -error2:
> - gpio_free(ETH_KS8851_QUART);
> -error1:
> - gpio_free(ETH_KS8851_POWER_ON);
> return status;
> }
>
> @@ -602,21 +566,13 @@ static int __init omap4_i2c_init(void)
>
> static void __init omap_sfh7741prox_init(void)
> {
> - int error;
> + int error;
>
> - error = gpio_request(OMAP4_SFH7741_ENABLE_GPIO, "sfh7741");
> - if (error < 0) {
> + error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,
> + GPIOF_OUT_INIT_LOW, "sfh7741");
> + if (error < 0)
> pr_err("%s:failed to request GPIO %d, error %d\n",
> __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> - return;
> - }
> -
> - error = gpio_direction_output(OMAP4_SFH7741_ENABLE_GPIO , 0);
> - if (error < 0) {
> - pr_err("%s: GPIO configuration failed: GPIO %d,error %d\n",
> - __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> - gpio_free(OMAP4_SFH7741_ENABLE_GPIO);
> - }
> }
>
> static void sdp4430_hdmi_mux_init(void)
> @@ -633,27 +589,19 @@ static void sdp4430_hdmi_mux_init(void)
> OMAP_PIN_INPUT_PULLUP);
> }
>
> +static struct gpio sdp4430_hdmi_gpios[] = {
> + { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> + { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> +};
> +
> static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
> {
> int status;
>
> - status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_hpd");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
> - return status;
> - }
> - status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_ls_oe");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
> - goto error1;
> - }
> -
> - return 0;
> -
> -error1:
> - gpio_free(HDMI_GPIO_HPD);
> + status = gpio_request_array(sdp4430_hdmi_gpios,
> + ARRAY_SIZE(sdp4430_hdmi_gpios));
> + if (status)
> + pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
>
> return status;
> }
> diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
> index a890d24..5e438a7 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)
> return;
> }
>
> - ret = gpio_request(GPIO_USB_POWER, "usb_ehci_enable");
> + ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
> + "usb_ehci_enable");
> if (ret < 0) {
> pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
> return;
> }
>
> - ret = gpio_direction_output(GPIO_USB_POWER, 1);
> - if (ret < 0) {
> - gpio_free(GPIO_USB_POWER);
> - pr_err("Unable to initialize EHCI power\n");
> - return;
> - }
> -
> usbhs_init(&usbhs_bdata);
> }
>
> diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
> index ce7d5e6..6c47060 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)
> int r;
>
> omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP);
> - r = gpio_request(GPIO_RTCS35390A_IRQ, "rtcs35390a-irq");
> +
> + r = gpio_request_one(GPIO_RTCS35390A_IRQ, GPIOF_IN, "rtcs35390a-irq");
> if (r < 0) {
> printk(KERN_WARNING "failed to request GPIO#%d\n",
> GPIO_RTCS35390A_IRQ);
> return;
> }
> - r = gpio_direction_input(GPIO_RTCS35390A_IRQ);
> - if (r < 0) {
> - printk(KERN_WARNING "GPIO#%d cannot be configured as input\n",
> - GPIO_RTCS35390A_IRQ);
> - gpio_free(GPIO_RTCS35390A_IRQ);
> - return;
> - }
> +
> am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ);
> }
>
> @@ -242,6 +237,15 @@ static int dvi_enabled;
>
> #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
> defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
> +static struct gpio am3517_evm_dss_gpios[] __initdata = {
> + /* GPIO 182 = LCD Backlight Power */
> + { LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" },
> + /* GPIO 181 = LCD Panel PWM */
> + { LCD_PANEL_PWM, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
> + /* GPIO 176 = LCD Panel Power enable pin */
> + { LCD_PANEL_PWR, GPIOF_OUT_INIT_HIGH, "dvi enable" },
> +};
> +
> static void __init am3517_evm_display_init(void)
> {
> int r;
> @@ -249,41 +253,15 @@ static void __init am3517_evm_display_init(void)
> omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP);
> omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN);
> omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN);
> - /*
> - * Enable GPIO 182 = LCD Backlight Power
> - */
> - r = gpio_request(LCD_PANEL_BKLIGHT_PWR, "lcd_backlight_pwr");
> +
> + r = gpio_request_array(am3517_evm_dss_gpios,
> + ARRAY_SIZE(am3517_evm_dss_gpios));
> if (r) {
> - printk(KERN_ERR "failed to get lcd_backlight_pwr\n");
> + printk(KERN_ERR "failed to get DSS panel control GPIOs\n");
> return;
> }
> - gpio_direction_output(LCD_PANEL_BKLIGHT_PWR, 1);
> - /*
> - * Enable GPIO 181 = LCD Panel PWM
> - */
> - r = gpio_request(LCD_PANEL_PWM, "lcd_pwm");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_pwm\n");
> - goto err_1;
> - }
> - gpio_direction_output(LCD_PANEL_PWM, 1);
> - /*
> - * Enable GPIO 176 = LCD Panel Power enable pin
> - */
> - r = gpio_request(LCD_PANEL_PWR, "lcd_panel_pwr");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_pwr\n");
> - goto err_2;
> - }
> - gpio_direction_output(LCD_PANEL_PWR, 1);
>
> printk(KERN_INFO "Display initialized successfully\n");
> - return;
> -
> -err_2:
> - gpio_free(LCD_PANEL_PWM);
> -err_1:
> - gpio_free(LCD_PANEL_BKLIGHT_PWR);
> }
> #else
> static 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 f4f8374..f3beb8e 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)
> unsigned int rate;
> struct clk *gpmc_fck;
> int eth_cs;
> + int err;
>
> gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
> if (IS_ERR(gpmc_fck)) {
> @@ -245,15 +246,13 @@ static inline void __init apollon_init_smc91x(void)
> apollon_smc91x_resources[0].end = base + 0x30f;
> udelay(100);
>
> - omap_mux_init_gpio(74, 0);
> - if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) {
> + omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0);
> + err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq");
> + if (err) {
> printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
> APOLLON_ETHR_GPIO_IRQ);
> gpmc_cs_free(APOLLON_ETH_CS);
> - goto out;
> }
> - gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
> -
> out:
> clk_disable(gpmc_fck);
> clk_put(gpmc_fck);
> @@ -280,20 +279,19 @@ static void __init omap_apollon_init_early(void)
> omap2_init_common_devices(NULL, NULL);
> }
>
> +static struct gpio apollon_gpio_leds[] __initdata = {
> + { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
> + { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
> + { LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4 */
> +};
> +
> static void __init apollon_led_init(void)
> {
> - /* LED0 - AA10 */
> omap_mux_init_signal("vlynq_clk.gpio_13", 0);
> - gpio_request(LED0_GPIO13, "LED0");
> - gpio_direction_output(LED0_GPIO13, 0);
> - /* LED1 - AA6 */
> omap_mux_init_signal("vlynq_rx1.gpio_14", 0);
> - gpio_request(LED1_GPIO14, "LED1");
> - gpio_direction_output(LED1_GPIO14, 0);
> - /* LED2 - AA4 */
> omap_mux_init_signal("vlynq_rx0.gpio_15", 0);
> - gpio_request(LED2_GPIO15, "LED2");
> - gpio_direction_output(LED2_GPIO15, 0);
> +
> + gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));
> }
>
> static void __init apollon_usb_init(void)
> @@ -301,8 +299,7 @@ static void __init apollon_usb_init(void)
> /* USB device */
> /* DEVICE_SUSPEND */
> omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0);
> - gpio_request(12, "USB suspend");
> - gpio_direction_output(12, 0);
> + gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend");
> omap2_usbfs_init(&apollon_usb_config);
> }
>
> diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
> index e0e2d48..6063be8 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) {}
> #define CM_T35_LCD_BL_GPIO 58
> #define CM_T35_DVI_EN_GPIO 54
>
> -static int lcd_bl_gpio;
> -static int lcd_en_gpio;
> -static int dvi_en_gpio;
> -
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -196,8 +192,8 @@ static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
> return -EINVAL;
> }
>
> - gpio_set_value(lcd_en_gpio, 1);
> - gpio_set_value(lcd_bl_gpio, 1);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
> + gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
>
> lcd_enabled = 1;
>
> @@ -208,8 +204,8 @@ static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
> {
> lcd_enabled = 0;
>
> - gpio_set_value(lcd_bl_gpio, 0);
> - gpio_set_value(lcd_en_gpio, 0);
> + gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
> }
>
> static 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)
> return -EINVAL;
> }
>
> - gpio_set_value(dvi_en_gpio, 0);
> + gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
> dvi_enabled = 1;
>
> return 0;
> @@ -227,7 +223,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
>
> static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
> {
> - gpio_set_value(dvi_en_gpio, 1);
> + gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
> dvi_enabled = 0;
> }
>
> @@ -309,62 +305,38 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
> },
> };
>
> +static struct gpio cm_t35_dss_gpios[] __initdata = {
> + { CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
> + { CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
> + { CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
> +};
> +
> static void __init cm_t35_init_display(void)
> {
> int err;
>
> - lcd_en_gpio = CM_T35_LCD_EN_GPIO;
> - lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
> - dvi_en_gpio = CM_T35_DVI_EN_GPIO;
> -
> spi_register_board_info(cm_t35_lcd_spi_board_info,
> ARRAY_SIZE(cm_t35_lcd_spi_board_info));
>
> - err = gpio_request(lcd_en_gpio, "LCD RST");
> - if (err) {
> - pr_err("CM-T35: failed to get LCD reset GPIO\n");
> - goto out;
> - }
> -
> - err = gpio_request(lcd_bl_gpio, "LCD BL");
> + err = gpio_request_array(cm_t35_dss_gpios,
> + ARRAY_SIZE(cm_t35_dss_gpios));
> if (err) {
> - pr_err("CM-T35: failed to get LCD backlight control GPIO\n");
> - goto err_lcd_bl;
> + pr_err("CM-T35: failed to request DSS control GPIOs\n");
> + return;
> }
>
> - err = gpio_request(dvi_en_gpio, "DVI EN");
> - if (err) {
> - pr_err("CM-T35: failed to get DVI reset GPIO\n");
> - goto err_dvi_en;
> - }
> -
> - gpio_export(lcd_en_gpio, 0);
> - gpio_export(lcd_bl_gpio, 0);
> - gpio_export(dvi_en_gpio, 0);
> - gpio_direction_output(lcd_en_gpio, 0);
> - gpio_direction_output(lcd_bl_gpio, 0);
> - gpio_direction_output(dvi_en_gpio, 1);
> + gpio_export(CM_T35_LCD_EN_GPIO, 0);
> + gpio_export(CM_T35_LCD_BL_GPIO, 0);
> + gpio_export(CM_T35_DVI_EN_GPIO, 0);
>
> msleep(50);
> - gpio_set_value(lcd_en_gpio, 1);
> + gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
>
> err = omap_display_init(&cm_t35_dss_data);
> if (err) {
> pr_err("CM-T35: failed to register DSS device\n");
> - goto err_dev_reg;
> + gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
> }
> -
> - return;
> -
> -err_dev_reg:
> - gpio_free(dvi_en_gpio);
> -err_dvi_en:
> - gpio_free(lcd_bl_gpio);
> -err_lcd_bl:
> - gpio_free(lcd_en_gpio);
> -out:
> -
> - return;
> }
>
> static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
> @@ -497,10 +469,8 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
> {
> int wlan_rst = gpio + 2;
>
> - if ((gpio_request(wlan_rst, "WLAN RST") == 0) &&
> - (gpio_direction_output(wlan_rst, 1) == 0)) {
> + if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
> gpio_export(wlan_rst, 0);
> -
> udelay(10);
> gpio_set_value(wlan_rst, 0);
> udelay(10);
> diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
> index a27e3ee..08f08e8 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)
> {
> int err;
>
> - err = gpio_request(RTC_CS_EN_GPIO, "rtc cs en");
> + err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,
> + "rtc cs en");
> if (err) {
> pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);
> return;
> }
>
> - gpio_direction_output(RTC_CS_EN_GPIO, 1);
> -
> platform_device_register(&cm_t3517_rtc_device);
> }
> #else
> @@ -182,11 +181,11 @@ static int cm_t3517_init_usbh(void)
> {
> int err;
>
> - err = gpio_request(USB_HUB_RESET_GPIO, "usb hub rst");
> + err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,
> + "usb hub rst");
> if (err) {
> pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);
> } else {
> - gpio_direction_output(USB_HUB_RESET_GPIO, 0);
> udelay(10);
> gpio_set_value(USB_HUB_RESET_GPIO, 1);
> msleep(1);
> diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
> index 405542a..3bd344a 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,
> /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
> devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
> ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
> - GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN");
> + GPIOF_OUT_INIT_LOW, "LCD_PWREN");
> if (ret < 0) {
> devkit8000_lcd_device.reset_gpio = -EINVAL;
> printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
> @@ -251,7 +251,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
> /* gpio + 7 is "DVI_PD" (out, active low) */
> devkit8000_dvi_device.reset_gpio = gpio + 7;
> ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
> - GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown");
> + GPIOF_OUT_INIT_LOW, "DVI PowerDown");
> if (ret < 0) {
> devkit8000_dvi_device.reset_gpio = -EINVAL;
> printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
> @@ -483,14 +483,14 @@ static void __init omap_dm9000_init(void)
> {
> unsigned char *eth_addr = omap_dm9000_platdata.dev_addr;
> struct omap_die_id odi;
> + int ret;
>
> - if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) {
> + ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq");
> + if (ret < 0) {
> printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n",
> OMAP_DM9000_GPIO_IRQ);
> return;
> - }
> -
> - gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
> + }
>
> /* init the mac address using DIE id */
> omap_get_die_id(&odi);
> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> index 2c9a919..c62c297 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)
>
> omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
>
> - if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_HW0_REV") == 0) &&
> - (gpio_direction_input(IGEP2_GPIO_LED1_RED) == 0)) {
> - ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
> - if (ret == 0) {
> - pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
> - hwrev = IGEP2_BOARD_HWREV_C;
> - } else if (ret == 1) {
> - pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
> - hwrev = IGEP2_BOARD_HWREV_B;
> - } else {
> - pr_err("IGEP2: Unknown Hardware Revision\n");
> - hwrev = -1;
> - }
> - } else {
> + if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {
> pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
> pr_err("IGEP2: Unknown Hardware Revision\n");
> + return;
> + }
> +
> + ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
> + if (ret == 0) {
> + pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
> + hwrev = IGEP2_BOARD_HWREV_C;
> + } else if (ret == 1) {
> + pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
> + hwrev = IGEP2_BOARD_HWREV_B;
> + } else {
> + pr_err("IGEP2: Unknown Hardware Revision\n");
> + hwrev = -1;
> }
>
> gpio_free(IGEP2_GPIO_LED1_RED);
> @@ -339,32 +339,35 @@ static void __init igep2_leds_init(void)
> }
>
> #else
> +static struct gpio igep2_gpio_leds[] __initdata = {
> + { IGEP2_GPIO_LED0_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },
> + { IGEP2_GPIO_LED0_GREEN, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },
> + { IGEP2_GPIO_LED1_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },
> +};
> +
> static inline void igep2_leds_init(void)
> {
> - if ((gpio_request(IGEP2_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED0_RED, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED0_RED, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
> -
> - if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
> -
> - if ((gpio_request(IGEP2_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
> - (gpio_direction_output(IGEP2_GPIO_LED1_RED, 0) == 0))
> - gpio_export(IGEP2_GPIO_LED1_RED, 0);
> - else
> - pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
> + if (gpio_request_array(igep2_gpio_leds, ARRAY_SIZE(igep2_gpio_leds))) {
> + pr_warning("IGEP v2: Could not obtain leds gpios\n");
> + return;
> + }
>
> + gpio_export(IGEP2_GPIO_LED0_RED, 0);
> + gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
> + gpio_export(IGEP2_GPIO_LED1_RED, 0);
> }
> #endif
>
> +static struct gpio igep2_twl_gpios[] = {
> + { -EINVAL, GPIOF_IN, "GPIO_EHCI_NOC" },
> + { -EINVAL, GPIOF_OUT_INIT_LOW, "GPIO_USBH_CPEN" },
> +};
> +
> static int igep2_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> + int ret;
> +
> /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> mmc[0].gpio_cd = gpio + 0;
> omap2_hsmmc_init(mmc);
> @@ -373,22 +376,20 @@ static int igep2_twl_gpio_setup(struct device *dev,
> * REVISIT: need ehci-omap hooks for external VBUS
> * power switch and overcurrent detect
> */
> - if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
> - (gpio_direction_input(gpio + 1) < 0))
> - pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
> + igep2_twl_gpios[0].gpio = gpio + 1;
>
> - /*
> - * TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN
> - * (out, active low)
> - */
> - if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) ||
> - (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
> + /* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN (out, active low) */
> + igep2_twl_gpios[1].gpio = gpio + TWL4030_GPIO_MAX;
> +
> + ret = gpio_request_array(igep2_twl_gpios, ARRAY_SIZE(igep2_twl_gpios));
> + if (ret < 0)
> pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> #if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> - if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
> - && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0))
> + ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
> + "gpio-led:green:d1");
> + if (ret == 0)
> gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> else
> pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n");
> @@ -469,8 +470,9 @@ static struct regulator_init_data igep2_vpll2 = {
>
> static void __init igep2_display_init(void)
> {
> - if (gpio_request(IGEP2_GPIO_DVI_PUP, "GPIO_DVI_PUP") &&
> - gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1))
> + int err = gpio_request_one(IGEP2_GPIO_DVI_PUP, GPIOF_OUT_INIT_HIGH,
> + "GPIO_DVI_PUP");
> + if (err)
> pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
> }
>
> @@ -577,44 +579,43 @@ static struct omap_board_mux board_mux[] __initdata = {
> #endif
>
> #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
> +static struct gpio igep2_wlan_bt_gpios[] __initdata = {
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
> +};
>
> static void __init igep2_wlan_bt_init(void)
> {
> - unsigned npd, wreset, btreset;
> + int err;
>
> /* GPIO's for WLAN-BT combo depends on hardware revision */
> if (hwrev == IGEP2_BOARD_HWREV_B) {
> - npd = IGEP2_RB_GPIO_WIFI_NPD;
> - wreset = IGEP2_RB_GPIO_WIFI_NRESET;
> - btreset = IGEP2_RB_GPIO_BT_NRESET;
> + igep2_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;
> + igep2_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;
> + igep2_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;
> } else if (hwrev == IGEP2_BOARD_HWREV_C) {
> - npd = IGEP2_RC_GPIO_WIFI_NPD;
> - wreset = IGEP2_RC_GPIO_WIFI_NRESET;
> - btreset = IGEP2_RC_GPIO_BT_NRESET;
> + igep2_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;
> + igep2_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;
> + igep2_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;
> } else
> return;
>
> - /* Set GPIO's for WLAN-BT combo module */
> - if ((gpio_request(npd, "GPIO_WIFI_NPD") == 0) &&
> - (gpio_direction_output(npd, 1) == 0)) {
> - gpio_export(npd, 0);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NPD\n");
> -
> - if ((gpio_request(wreset, "GPIO_WIFI_NRESET") == 0) &&
> - (gpio_direction_output(wreset, 1) == 0)) {
> - gpio_export(wreset, 0);
> - gpio_set_value(wreset, 0);
> - udelay(10);
> - gpio_set_value(wreset, 1);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NRESET\n");
> + err = gpio_request_array(igep2_wlan_bt_gpios,
> + ARRAY_SIZE(igep2_wlan_bt_gpios));
> + if (err) {
> + pr_warning("IGEP2: Could not obtain WIFI/BT gpios\n");
> + return;
> + }
> +
> + gpio_export(igep2_wlan_bt_gpios[0].gpio, 0);
> + gpio_export(igep2_wlan_bt_gpios[1].gpio, 0);
> + gpio_export(igep2_wlan_bt_gpios[2].gpio, 0);
> +
> + gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 0);
> + udelay(10);
> + gpio_set_value(igep2_wlan_bt_gpios[1].gpio, 1);
>
> - if ((gpio_request(btreset, "GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(btreset, 1) == 0)) {
> - gpio_export(btreset, 0);
> - } else
> - pr_warning("IGEP2: Could not obtain gpio GPIO_BT_NRESET\n");
> }
> #else
> static 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 512a7eb..83f6be2 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)
> }
>
> #else
> +static struct gpio igep3_gpio_leds[] __initdata = {
> + { IGEP3_GPIO_LED0_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d0" },
> + { IGEP3_GPIO_LED0_GREEN, GPIOF_OUT_INIT_HIGH, "gpio-led:green:d0" },
> + { IGEP3_GPIO_LED1_RED, GPIOF_OUT_INIT_HIGH, "gpio-led:red:d1" },
> +};
> +
> static inline void igep3_leds_init(void)
> {
> - if ((gpio_request(IGEP3_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED0_RED, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED0_RED, 0);
> - gpio_set_value(IGEP3_GPIO_LED0_RED, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_RED\n");
> -
> - if ((gpio_request(IGEP3_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED0_GREEN, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
> - gpio_set_value(IGEP3_GPIO_LED0_GREEN, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED0_GREEN\n");
> -
> - if ((gpio_request(IGEP3_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_LED1_RED, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_LED1_RED, 0);
> - gpio_set_value(IGEP3_GPIO_LED1_RED, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_RED\n");
> + if (gpio_request_array(igep3_gpio_leds, ARRAY_SIZE(igep3_gpio_leds))) {
> + pr_warning("IGEP3: Could not obtain leds gpios\n");
> + return;
> + }
> + gpio_export(IGEP3_GPIO_LED0_RED, 0);
> + gpio_export(IGEP3_GPIO_LED0_GREEN, 0);
> + gpio_export(IGEP3_GPIO_LED1_RED, 0);
> }
> #endif
>
> static int igep3_twl4030_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> - mmc[0].gpio_cd = gpio + 0;
> - omap2_hsmmc_init(mmc);
> +#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> + int ret;
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> -#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
> - if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
> - && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) {
> - gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> - gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
> - } else
> + ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
> + "gpio-led:green:d1");
> + if (ret)
> pr_warning("IGEP3: Could not obtain gpio GPIO_LED1_GREEN\n");
> + else
> + gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
> #else
> igep3_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
> #endif
> + /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> + mmc[0].gpio_cd = gpio + 0;
> + omap2_hsmmc_init(mmc);
>
> return 0;
> };
> @@ -358,35 +352,36 @@ static int __init igep3_i2c_init(void)
> }
>
> #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
> +static struct gpio igep3_wlan_bt_gpios[] __initdata = {
> + { IGEP3_GPIO_WIFI_NPD, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
> + { IGEP3_GPIO_WIFI_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
> + { IGEP3_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
> +};
>
> static void __init igep3_wifi_bt_init(void)
> {
> + int err;
> +
> /* Configure MUX values for W-LAN + Bluetooth GPIO's */
> omap_mux_init_gpio(IGEP3_GPIO_WIFI_NPD, OMAP_PIN_OUTPUT);
> omap_mux_init_gpio(IGEP3_GPIO_WIFI_NRESET, OMAP_PIN_OUTPUT);
> omap_mux_init_gpio(IGEP3_GPIO_BT_NRESET, OMAP_PIN_OUTPUT);
>
> /* Set GPIO's for W-LAN + Bluetooth combo module */
> - if ((gpio_request(IGEP3_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_WIFI_NPD, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NPD\n");
> -
> - if ((gpio_request(IGEP3_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_WIFI_NRESET, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
> - gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
> - udelay(10);
> - gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_WIFI_NRESET\n");
> -
> - if ((gpio_request(IGEP3_GPIO_BT_NRESET, "GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(IGEP3_GPIO_BT_NRESET, 1) == 0)) {
> - gpio_export(IGEP3_GPIO_BT_NRESET, 0);
> - } else
> - pr_warning("IGEP3: Could not obtain gpio GPIO_BT_NRESET\n");
> + err = gpio_request_array(igep3_wlan_bt_gpios,
> + ARRAY_SIZE(igep3_wlan_bt_gpios));
> + if (err) {
> + pr_warning("IGEP3: Could not obtain WIFI/BT gpios\n");
> + return;
> + }
> +
> + gpio_export(IGEP3_GPIO_WIFI_NPD, 0);
> + gpio_export(IGEP3_GPIO_WIFI_NRESET, 0);
> + gpio_export(IGEP3_GPIO_BT_NRESET, 0);
> +
> + gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 0);
> + udelay(10);
> + gpio_set_value(IGEP3_GPIO_WIFI_NRESET, 1);
> }
> #else
> void __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 e710cd9..8d74318 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)
> static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
>
> /* PM companion chip power control pin */
> - ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable");
> + ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW,
> + "TUSB6010 enable");
> if (ret != 0) {
> printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
> TUSB6010_GPIO_ENABLE);
> return;
> }
> - gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
> -
> tusb_set_power(0);
>
> ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
> @@ -494,8 +493,12 @@ static struct omap_mmc_platform_data mmc1_data = {
>
> static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
>
> -static void __init n8x0_mmc_init(void)
> +static struct gpio n810_emmc_gpios[] __initdata = {
> + { N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" },
> + { N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" },
> +};
>
> +static void __init n8x0_mmc_init(void)
> {
> int err;
>
> @@ -512,27 +515,18 @@ static void __init n8x0_mmc_init(void)
> mmc1_data.slots[1].ban_openended = 1;
> }
>
> - err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch");
> + err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW,
> + "MMC slot switch");
> if (err)
> return;
>
> - gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0);
> -
> if (machine_is_nokia_n810()) {
> - err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf");
> - if (err) {
> - gpio_free(N8X0_SLOT_SWITCH_GPIO);
> - return;
> - }
> - gpio_direction_output(N810_EMMC_VSD_GPIO, 0);
> -
> - err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd");
> + err = gpio_request_array(n810_emmc_gpios,
> + ARRAY_SIZE(n810_emmc_gpios));
> if (err) {
> gpio_free(N8X0_SLOT_SWITCH_GPIO);
> - gpio_free(N810_EMMC_VSD_GPIO);
> return;
> }
> - gpio_direction_output(N810_EMMC_VIO_GPIO, 0);
> }
>
> mmc_data[0] = &mmc1_data;
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index bc30ab0..3ff3a2c 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)
> return omap3_beagle_version;
> }
>
> +static struct gpio omap3_beagle_rev_gpios[] __initdata = {
> + { 171, GPIOF_IN, "rev_id_0" },
> + { 172, GPIOF_IN, "rev_id_1" },
> + { 173, GPIOF_IN, "rev_id_2" },
> +};
> +
> static void __init omap3_beagle_init_rev(void)
> {
> int ret;
> @@ -89,21 +95,13 @@ static void __init omap3_beagle_init_rev(void)
> omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
> omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
>
> - ret = gpio_request(171, "rev_id_0");
> - if (ret < 0)
> - goto fail0;
> -
> - ret = gpio_request(172, "rev_id_1");
> - if (ret < 0)
> - goto fail1;
> -
> - ret = gpio_request(173, "rev_id_2");
> - if (ret < 0)
> - goto fail2;
> -
> - gpio_direction_input(171);
> - gpio_direction_input(172);
> - gpio_direction_input(173);
> + ret = gpio_request_array(omap3_beagle_rev_gpios,
> + ARRAY_SIZE(omap3_beagle_rev_gpios));
> + if (ret < 0) {
> + printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
> + omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> + return;
> + }
>
> beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
> | (gpio_get_value(173) << 2);
> @@ -129,18 +127,6 @@ static void __init omap3_beagle_init_rev(void)
> printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
> omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> }
> -
> - return;
> -
> -fail2:
> - gpio_free(172);
> -fail1:
> - gpio_free(171);
> -fail0:
> - printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
> - omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
> -
> - return;
> }
>
> static struct mtd_partition omap3beagle_nand_partitions[] = {
> @@ -235,13 +221,10 @@ static void __init beagle_display_init(void)
> {
> int r;
>
> - r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
> - if (r < 0) {
> + r = gpio_request_one(beagle_dvi_device.reset_gpio, GPIOF_OUT_INIT_LOW,
> + "DVI reset");
> + if (r < 0)
> printk(KERN_ERR "Unable to get DVI reset GPIO\n");
> - return;
> - }
> -
> - gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
> }
>
> #include "sdram-micron-mt46h32m32lf-6.h"
> @@ -268,7 +251,7 @@ static struct gpio_led gpio_leds[];
> static int beagle_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - int r;
> + int r, usb_pwr_level;
>
> if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> mmc[0].gpio_wp = -EINVAL;
> @@ -287,66 +270,46 @@ static int beagle_twl_gpio_setup(struct device *dev,
> beagle_vmmc1_supply.dev = mmc[0].dev;
> beagle_vsim_supply.dev = mmc[0].dev;
>
> - /* REVISIT: need ehci-omap hooks for external VBUS
> - * power switch and overcurrent detect
> - */
> - if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
> - r = gpio_request(gpio + 1, "EHCI_nOC");
> - if (!r) {
> - r = gpio_direction_input(gpio + 1);
> - if (r)
> - gpio_free(gpio + 1);
> - }
> - if (r)
> - pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> - }
> -
> /*
> * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
> * high / others active low)
> - */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> - if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
> - else
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> -
> - /* DVI reset GPIO is different between beagle revisions */
> - if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
> - beagle_dvi_device.reset_gpio = 129;
> - else
> - beagle_dvi_device.reset_gpio = 170;
> -
> - /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> - gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> -
> - /*
> - * gpio + 1 on Xm controls the TFP410's enable line (active low)
> - * gpio + 2 control varies depending on the board rev as follows:
> - * P7/P8 revisions(prototype): Camera EN
> - * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
> + * DVI reset GPIO is different between beagle revisions
> */
> if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> - r = gpio_request(gpio + 1, "nDVI_PWR_EN");
> - if (!r) {
> - r = gpio_direction_output(gpio + 1, 0);
> - if (r)
> - gpio_free(gpio + 1);
> - }
> + usb_pwr_level = GPIOF_OUT_INIT_HIGH;
> + beagle_dvi_device.reset_gpio = 129;
> + /*
> + * gpio + 1 on Xm controls the TFP410's enable line (active low)
> + * gpio + 2 control varies depending on the board rev as below:
> + * P7/P8 revisions(prototype): Camera EN
> + * A2+ revisions (production): LDO (DVI, serial, led blocks)
> + */
> + r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW,
> + "nDVI_PWR_EN");
> if (r)
> pr_err("%s: unable to configure nDVI_PWR_EN\n",
> __func__);
> - r = gpio_request(gpio + 2, "DVI_LDO_EN");
> - if (!r) {
> - r = gpio_direction_output(gpio + 2, 1);
> - if (r)
> - gpio_free(gpio + 2);
> - }
> + r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
> + "DVI_LDO_EN");
> if (r)
> pr_err("%s: unable to configure DVI_LDO_EN\n",
> __func__);
> + } else {
> + usb_pwr_level = GPIOF_OUT_INIT_LOW;
> + beagle_dvi_device.reset_gpio = 170;
> + /*
> + * REVISIT: need ehci-omap hooks for external VBUS
> + * power switch and overcurrent detect
> + */
> + if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
> + pr_err("%s: unable to configure EHCI_nOC\n", __func__);
> }
>
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
> +
> + /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> + gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> +
> return 0;
> }
>
> @@ -608,9 +571,8 @@ static void __init omap3_beagle_init(void)
> omap_serial_init();
>
> omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> - gpio_request(170, "DVI_nPD");
> /* REVISIT leave DVI powered down until it's needed ... */
> - gpio_direction_output(170, true);
> + gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
>
> usb_musb_init(NULL);
> usbhs_init(&usbhs_bdata);
> diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
> index 5066b0b..02e1ad2 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; }
> #define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
> #define OMAP3EVM_DVI_PANEL_EN_GPIO 199
>
> +static struct gpio omap3_evm_dss_gpios[] __initdata = {
> + { OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
> + { OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
> + { OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
> + { OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
> + { OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
> + { OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
> +};
> +
> static int lcd_enabled;
> static int dvi_enabled;
>
> @@ -156,61 +165,10 @@ static void __init omap3_evm_display_init(void)
> {
> int r;
>
> - r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_resb\n");
> - return;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_ini\n");
> - goto err_1;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_qvga\n");
> - goto err_2;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_lr\n");
> - goto err_3;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_ud\n");
> - goto err_4;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
> -
> - r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
> - if (r) {
> - printk(KERN_ERR "failed to get lcd_panel_envdd\n");
> - goto err_5;
> - }
> - gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
> -
> - return;
> -
> -err_5:
> - gpio_free(OMAP3EVM_LCD_PANEL_UD);
> -err_4:
> - gpio_free(OMAP3EVM_LCD_PANEL_LR);
> -err_3:
> - gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
> -err_2:
> - gpio_free(OMAP3EVM_LCD_PANEL_INI);
> -err_1:
> - gpio_free(OMAP3EVM_LCD_PANEL_RESB);
> -
> + r = gpio_request_array(omap3_evm_dss_gpios,
> + ARRAY_SIZE(omap3_evm_dss_gpios));
> + if (r)
> + printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
> }
>
> static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
> @@ -400,7 +358,7 @@ static struct platform_device leds_gpio = {
> static int omap3evm_twl_gpio_setup(struct device *dev,
> unsigned gpio, unsigned ngpio)
> {
> - int r;
> + int r, lcd_bl_en;
>
> /* gpio + 0 is "mmc0_cd" (input/IRQ) */
> omap_mux_init_gpio(63, OMAP_PIN_INPUT);
> @@ -417,16 +375,14 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
> */
>
> /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
> - r = gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
> - if (!r)
> - r = gpio_direction_output(gpio + TWL4030_GPIO_MAX,
> - (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) ? 1 : 0);
> + lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
> + GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
> + r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
> if (r)
> printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
>
> /* gpio + 7 == DVI Enable */
> - gpio_request(gpio + 7, "EN_DVI");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
> gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> @@ -717,6 +673,11 @@ static struct omap_musb_board_data musb_board_data = {
> .power = 100,
> };
>
> +static struct gpio omap3_evm_ehci_gpios[] __initdata = {
> + { OMAP3_EVM_EHCI_VBUS, GPIOF_OUT_INIT_HIGH, "enable EHCI VBUS" },
> + { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" },
> +};
> +
> static void __init omap3_evm_init(void)
> {
> omap3_evm_get_revision();
> @@ -740,16 +701,12 @@ static void __init omap3_evm_init(void)
>
> if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
> /* enable EHCI VBUS using GPIO22 */
> - omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP);
> - gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
> - gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
> - gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
> -
> + omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
> /* Select EHCI port on main board */
> - omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP);
> - gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port");
> - gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0);
> - gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0);
> + omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
> + OMAP_PIN_INPUT_PULLUP);
> + gpio_request_array(omap3_evm_ehci_gpios,
> + ARRAY_SIZE(omap3_evm_ehci_gpios));
>
> /* setup EHCI phy reset config */
> 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 6c22d3f..78dd2a7 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,
>
> /* gpio + 13 drives 32kHz buffer for wifi module */
> gpio_32khz = gpio + 13;
> - ret = gpio_request(gpio_32khz, "wifi 32kHz");
> + ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz");
> if (ret < 0) {
> pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret);
> - goto fail;
> - }
> -
> - ret = gpio_direction_output(gpio_32khz, 1);
> - if (ret < 0) {
> - pr_err("Cannot set GPIO line %d, ret=%d\n", gpio_32khz, ret);
> - goto fail_direction;
> + return -ENODEV;
> }
>
> return 0;
> -
> -fail_direction:
> - gpio_free(gpio_32khz);
> -fail:
> - return -ENODEV;
> }
>
> static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
> @@ -584,14 +573,10 @@ static void __init pandora_wl1251_init(void)
>
> memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
>
> - ret = gpio_request(PANDORA_WIFI_IRQ_GPIO, "wl1251 irq");
> + ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
> if (ret < 0)
> goto fail;
>
> - ret = gpio_direction_input(PANDORA_WIFI_IRQ_GPIO);
> - if (ret < 0)
> - goto fail_irq;
> -
> pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
> if (pandora_wl1251_pdata.irq < 0)
> goto fail_irq;
> diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
> index 9981d06..085c60a 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,
> */
>
> /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
> + "EN_LCD_BKL");
>
> /* gpio + 7 == DVI Enable */
> - gpio_request(gpio + 7, "EN_DVI");
> - gpio_direction_output(gpio + 7, 0);
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
>
> /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */
> 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 392278d..82872d7 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,
> /* REVISIT: need ehci-omap hooks for external VBUS
> * power switch and overcurrent detect
> */
> -
> - gpio_request(gpio + 1, "EHCI_nOC");
> - gpio_direction_input(gpio + 1);
> + gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC");
>
> /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
> - gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
> - gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> + gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
> + "nEN_USB_PWR");
>
> /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
> gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> @@ -401,15 +399,10 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
>
> static void omap3_touchbook_poweroff(void)
> {
> - int r;
> + int pwr_off = TB_KILL_POWER_GPIO;
>
> - r = gpio_request(TB_KILL_POWER_GPIO, "DVI reset");
> - if (r < 0) {
> + if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "DVI reset") < 0)
> printk(KERN_ERR "Unable to get kill power GPIO\n");
> - return;
> - }
> -
> - gpio_direction_output(TB_KILL_POWER_GPIO, 0);
> }
>
> static int __init early_touchbook_revision(char *p)
> @@ -435,9 +428,8 @@ static void __init omap3_touchbook_init(void)
> omap_serial_init();
>
> omap_mux_init_gpio(170, OMAP_PIN_INPUT);
> - gpio_request(176, "DVI_nPD");
> /* REVISIT leave DVI powered down until it's needed ... */
> - gpio_direction_output(176, true);
> + gpio_request_one(176, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
>
> /* Touchscreen and accelerometer */
> 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 7eaad62..5d7c0a3 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 = {
> .reset_gpio_port[2] = -EINVAL
> };
>
> +static struct gpio panda_ehci_gpios[] __initdata = {
> + { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" },
> + { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" },
> +};
> +
> static void __init omap4_ehci_init(void)
> {
> int ret;
> @@ -121,44 +126,27 @@ static void __init omap4_ehci_init(void)
> phy_ref_clk = clk_get(NULL, "auxclk3_ck");
> if (IS_ERR(phy_ref_clk)) {
> pr_err("Cannot request auxclk3\n");
> - goto error1;
> + return;
> }
> clk_set_rate(phy_ref_clk, 19200000);
> clk_enable(phy_ref_clk);
>
> - /* disable the power to the usb hub prior to init */
> - ret = gpio_request(GPIO_HUB_POWER, "hub_power");
> + /* disable the power to the usb hub prior to init and reset phy+hub */
> + ret = gpio_request_array(panda_ehci_gpios,
> + ARRAY_SIZE(panda_ehci_gpios));
> if (ret) {
> - pr_err("Cannot request GPIO %d\n", GPIO_HUB_POWER);
> - goto error1;
> + pr_err("Unable to initialize EHCI power/reset\n");
> + return;
> }
> - gpio_export(GPIO_HUB_POWER, 0);
> - gpio_direction_output(GPIO_HUB_POWER, 0);
> - gpio_set_value(GPIO_HUB_POWER, 0);
>
> - /* reset phy+hub */
> - ret = gpio_request(GPIO_HUB_NRESET, "hub_nreset");
> - if (ret) {
> - pr_err("Cannot request GPIO %d\n", GPIO_HUB_NRESET);
> - goto error2;
> - }
> + gpio_export(GPIO_HUB_POWER, 0);
> gpio_export(GPIO_HUB_NRESET, 0);
> - gpio_direction_output(GPIO_HUB_NRESET, 0);
> - gpio_set_value(GPIO_HUB_NRESET, 0);
> gpio_set_value(GPIO_HUB_NRESET, 1);
>
> usbhs_init(&usbhs_bdata);
>
> /* enable power to hub */
> gpio_set_value(GPIO_HUB_POWER, 1);
> - return;
> -
> -error2:
> - gpio_free(GPIO_HUB_POWER);
> -error1:
> - pr_err("Unable to initialize EHCI power/reset\n");
> - return;
> -
> }
>
> static struct omap_musb_board_data musb_board_data = {
> @@ -638,27 +626,19 @@ static void omap4_panda_hdmi_mux_init(void)
> OMAP_PIN_INPUT_PULLUP);
> }
>
> +static struct gpio panda_hdmi_gpios[] = {
> + { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> + { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> +};
> +
> static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
> {
> int status;
>
> - status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_hpd");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
> - return status;
> - }
> - status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
> - "hdmi_gpio_ls_oe");
> - if (status) {
> - pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
> - goto error1;
> - }
> -
> - return 0;
> -
> -error1:
> - gpio_free(HDMI_GPIO_HPD);
> + status = gpio_request_array(panda_hdmi_gpios,
> + ARRAY_SIZE(panda_hdmi_gpios));
> + if (status)
> + pr_err("Cannot request HDMI GPIOs\n");
>
> return status;
> }
> diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
> index e152c13..c03f92b 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;
> #define OVERO_GPIO_LCD_EN 144
> #define OVERO_GPIO_LCD_BL 145
>
> +static struct gpio overo_dss_gpios[] __initdata = {
> + { OVERO_GPIO_LCD_EN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_EN" },
> + { OVERO_GPIO_LCD_BL, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_BL" },
> +};
> +
> static void __init overo_display_init(void)
> {
> - if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0))
> - gpio_export(OVERO_GPIO_LCD_EN, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_LCD_EN\n");
> + if (gpio_request_array(overo_dss_gpios, ARRAY_SIZE(overo_dss_gpios))) {
> + printk(KERN_ERR "could not obtain DSS control GPIOs\n");
> + return;
> + }
>
> - if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0))
> - gpio_export(OVERO_GPIO_LCD_BL, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_LCD_BL\n");
> + gpio_export(OVERO_GPIO_LCD_EN, 0);
> + gpio_export(OVERO_GPIO_LCD_BL, 0);
> }
>
> static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
> @@ -553,8 +552,15 @@ static struct omap_board_mux board_mux[] __initdata = {
> };
> #endif
>
> +static struct gpio overo_bt_gpios[] __initdata = {
> + { OVERO_GPIO_BT_XGATE, GPIOF_OUT_INIT_LOW, "lcd enable" },
> + { OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
> +};
> +
> static void __init overo_init(void)
> {
> + int ret;
> +
> omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> overo_i2c_init();
> omap_display_init(&overo_dss_data);
> @@ -574,9 +580,9 @@ static void __init overo_init(void)
> omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
> omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
>
> - if ((gpio_request(OVERO_GPIO_W2W_NRESET,
> - "OVERO_GPIO_W2W_NRESET") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) {
> + ret = gpio_request_one(OVERO_GPIO_W2W_NRESET, GPIOF_OUT_INIT_HIGH,
> + "OVERO_GPIO_W2W_NRESET");
> + if (ret == 0) {
> gpio_export(OVERO_GPIO_W2W_NRESET, 0);
> gpio_set_value(OVERO_GPIO_W2W_NRESET, 0);
> udelay(10);
> @@ -586,25 +592,20 @@ static void __init overo_init(void)
> "OVERO_GPIO_W2W_NRESET\n");
> }
>
> - if ((gpio_request(OVERO_GPIO_BT_XGATE, "OVERO_GPIO_BT_XGATE") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_BT_XGATE, 0) == 0))
> + ret = gpio_request_array(overo_bt_gpios, ARRAY_SIZE(overo_bt_gpios));
> + if (ret) {
> + pr_err("%s: could not obtain BT gpios\n", __func__);
> + } else {
> gpio_export(OVERO_GPIO_BT_XGATE, 0);
> - else
> - printk(KERN_ERR "could not obtain gpio for OVERO_GPIO_BT_XGATE\n");
> -
> - if ((gpio_request(OVERO_GPIO_BT_NRESET, "OVERO_GPIO_BT_NRESET") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_BT_NRESET, 1) == 0)) {
> gpio_export(OVERO_GPIO_BT_NRESET, 0);
> gpio_set_value(OVERO_GPIO_BT_NRESET, 0);
> mdelay(6);
> gpio_set_value(OVERO_GPIO_BT_NRESET, 1);
> - } else {
> - printk(KERN_ERR "could not obtain gpio for "
> - "OVERO_GPIO_BT_NRESET\n");
> }
>
> - if ((gpio_request(OVERO_GPIO_USBH_CPEN, "OVERO_GPIO_USBH_CPEN") == 0) &&
> - (gpio_direction_output(OVERO_GPIO_USBH_CPEN, 1) == 0))
> + ret = gpio_request_one(OVERO_GPIO_USBH_CPEN, GPIOF_OUT_INIT_HIGH,
> + "OVERO_GPIO_USBH_CPEN");
> + if (ret == 0)
> gpio_export(OVERO_GPIO_USBH_CPEN, 0);
> else
> 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 a5bf5e9..2e509f9 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)
> static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
> {
> /* FIXME this gpio setup is just a placeholder for now */
> - gpio_request(gpio + 6, "backlight_pwm");
> - gpio_direction_output(gpio + 6, 0);
> - gpio_request(gpio + 7, "speaker_en");
> - gpio_direction_output(gpio + 7, 1);
> + gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
> + gpio_request_one(gpio + 7, GPIOF_OUT_INIT_HIGH, "speaker_en");
>
> return 0;
> }
> @@ -912,26 +910,20 @@ static void rx51_wl1251_set_power(bool enable)
> gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
> }
>
> +static struct gpio rx51_wl1251_gpios[] __initdata = {
> + { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW, "wl1251 power" },
> + { RX51_WL1251_IRQ_GPIO, GPIOF_IN, "wl1251 irq" },
> +};
> +
> static void __init rx51_init_wl1251(void)
> {
> int irq, ret;
>
> - ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power");
> + ret = gpio_request_array(rx51_wl1251_gpios,
> + ARRAY_SIZE(rx51_wl1251_gpios));
> if (ret < 0)
> goto error;
>
> - ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
> - if (ret < 0)
> - goto err_power;
> -
> - ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
> - if (ret < 0)
> - goto err_power;
> -
> - ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
> - if (ret < 0)
> - goto err_irq;
> -
> irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
> if (irq < 0)
> goto err_irq;
> @@ -943,10 +935,7 @@ static void __init rx51_init_wl1251(void)
>
> err_irq:
> gpio_free(RX51_WL1251_IRQ_GPIO);
> -
> -err_power:
> gpio_free(RX51_WL1251_POWER_GPIO);
> -
> error:
> printk(KERN_ERR "wl1251 board initialisation failed\n");
> 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 89a66db..1977733 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)
> return 0;
> }
>
> - if (gpio_request(RX51_LCD_RESET_GPIO, "LCD ACX565AKM reset")) {
> + if (gpio_request_one(RX51_LCD_RESET_GPIO, GPIOF_OUT_INIT_HIGH,
> + "LCD ACX565AKM reset")) {
> pr_err("%s failed to get LCD Reset GPIO\n", __func__);
> return 0;
> }
>
> - gpio_direction_output(RX51_LCD_RESET_GPIO, 1);
> -
> omap_display_init(&rx51_dss_board_info);
> return 0;
> }
> diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
> index 2ee9ab9..6402e78 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)
>
> quart_gpio = ZOOM_QUADUART_GPIO;
>
> - if (gpio_request(quart_gpio, "TL16CP754C GPIO") < 0) {
> + if (gpio_request_one(quart_gpio, GPIOF_IN, "TL16CP754C GPIO") < 0)
> printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n",
> quart_gpio);
> - return;
> - }
> - gpio_direction_input(quart_gpio);
> }
>
> static inline int omap_zoom_debugboard_detect(void)
> @@ -92,12 +89,12 @@ static inline int omap_zoom_debugboard_detect(void)
>
> debug_board_detect = ZOOM_SMSC911X_GPIO;
>
> - if (gpio_request(debug_board_detect, "Zoom debug board detect") < 0) {
> + if (gpio_request_one(debug_board_detect, GPIOF_IN,
> + "Zoom debug board detect") < 0) {
> printk(KERN_ERR "Failed to request GPIO%d for Zoom debug"
> "board detect\n", debug_board_detect);
> return 0;
> }
> - gpio_direction_input(debug_board_detect);
>
> if (!gpio_get_value(debug_board_detect)) {
> ret = 0;
> diff --git a/arch/arm/mach-omap2/board-zoom-display.c b/arch/arm/mach-omap2/board-zoom-display.c
> index 37b84c2..ce53e82 100644
> --- a/arch/arm/mach-omap2/board-zoom-display.c
> +++ b/arch/arm/mach-omap2/board-zoom-display.c
> @@ -21,34 +21,19 @@
> #define LCD_PANEL_RESET_GPIO_PILOT 55
> #define LCD_PANEL_QVGA_GPIO 56
>
> +static struct gpio zoom_lcd_gpios[] __initdata = {
> + { -EINVAL, GPIOF_OUT_INIT_HIGH, "lcd reset" },
> + { LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" },
> +};
> +
> static void zoom_lcd_panel_init(void)
> {
> - int ret;
> - unsigned char lcd_panel_reset_gpio;
> -
> - lcd_panel_reset_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
> + zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
> LCD_PANEL_RESET_GPIO_PROD :
> LCD_PANEL_RESET_GPIO_PILOT;
>
> - ret = gpio_request(lcd_panel_reset_gpio, "lcd reset");
> - if (ret) {
> - pr_err("Failed to get LCD reset GPIO (gpio%d).\n",
> - lcd_panel_reset_gpio);
> - return;
> - }
> - gpio_direction_output(lcd_panel_reset_gpio, 1);
> -
> - ret = gpio_request(LCD_PANEL_QVGA_GPIO, "lcd qvga");
> - if (ret) {
> - pr_err("Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n",
> - LCD_PANEL_QVGA_GPIO);
> - goto err0;
> - }
> - gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
> -
> - return;
> -err0:
> - gpio_free(lcd_panel_reset_gpio);
> + if (gpio_request_array(zoom_lcd_gpios, ARRAY_SIZE(zoom_lcd_gpios)))
> + pr_err("%s: Failed to get LCD GPIOs.\n", __func__);
> }
>
> static 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 489294a..118c6f5 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,
> zoom_vsim_supply.dev = mmc[0].dev;
> zoom_vmmc2_supply.dev = mmc[1].dev;
>
> - ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable");
> - if (ret) {
> + ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
> + "lcd enable");
> + if (ret)
> pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
> LCD_PANEL_ENABLE_GPIO);
> - return ret;
> - }
> - gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
>
> return ret;
> }
> diff --git a/arch/arm/mach-omap2/gpmc-smc91x.c b/arch/arm/mach-omap2/gpmc-smc91x.c
> index 877c6f5..ba10c24 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)
> goto free1;
> }
>
> - if (gpio_request(gpmc_cfg->gpio_irq, "SMC91X irq") < 0)
> + if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "SMC91X irq") < 0)
> goto free1;
>
> - gpio_direction_input(gpmc_cfg->gpio_irq);
> gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
>
> if (gpmc_cfg->gpio_pwrdwn) {
> - ret = gpio_request(gpmc_cfg->gpio_pwrdwn, "SMC91X powerdown");
> + ret = gpio_request_one(gpmc_cfg->gpio_pwrdwn,
> + GPIOF_OUT_INIT_LOW, "SMC91X powerdown");
> if (ret)
> goto free2;
> - gpio_direction_output(gpmc_cfg->gpio_pwrdwn, 0);
> }
>
> if (gpmc_cfg->gpio_reset) {
> - ret = gpio_request(gpmc_cfg->gpio_reset, "SMC91X reset");
> + ret = gpio_request_one(gpmc_cfg->gpio_reset,
> + GPIOF_OUT_INIT_LOW, "SMC91X reset");
> if (ret)
> goto free3;
>
> - gpio_direction_output(gpmc_cfg->gpio_reset, 0);
> gpio_set_value(gpmc_cfg->gpio_reset, 1);
> msleep(100);
> 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 e09374a..9970331 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)
> gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0;
> gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff;
>
> - if (gpio_request(gpmc_cfg->gpio_irq, "smsc911x irq") < 0) {
> + if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "smsc911x irq")) {
> pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq);
> goto free1;
> }
>
> - gpio_direction_input(gpmc_cfg->gpio_irq);
> gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
>
> if (gpio_is_valid(gpmc_cfg->gpio_reset)) {
> - ret = gpio_request(gpmc_cfg->gpio_reset, "smsc911x reset");
> + ret = gpio_request_one(gpmc_cfg->gpio_reset,
> + GPIOF_OUT_INIT_HIGH, "smsc911x reset");
> if (ret) {
> pr_err("Failed to request reset GPIO%d\n",
> gpmc_cfg->gpio_reset);
> goto free2;
> }
>
> - gpio_direction_output(gpmc_cfg->gpio_reset, 1);
> gpio_set_value(gpmc_cfg->gpio_reset, 0);
> msleep(100);
> 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 8a3c05f..8dd26b7 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,
> );
>
> /* IRQ */
> - status = gpio_request(irq, "TUSB6010 irq");
> + status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq");
> if (status < 0) {
> printk(error, 3, status);
> return status;
> }
> - gpio_direction_input(irq);
> tusb_resources[2].start = irq + IH_GPIO_BASE;
>
> /* set up memory timings ... can speed them up later */
--
Regards,
Igor.
next prev parent reply other threads:[~2011-05-11 7:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-27 9:05 [PATCH] arm: omap2plus: GPIO cleanup mach-omap2/* Igor Grinberg
2011-04-27 9:05 ` Igor Grinberg
2011-04-27 14:01 ` Tony Lindgren
2011-04-27 14:01 ` Tony Lindgren
2011-04-27 15:58 ` Grazvydas Ignotas
2011-04-27 15:58 ` Grazvydas Ignotas
2011-04-28 7:17 ` Igor Grinberg
2011-04-28 7:17 ` Igor Grinberg
2011-05-03 10:39 ` Tony Lindgren
2011-05-03 10:39 ` Tony Lindgren
2011-05-03 15:22 ` [PATCH v2] arm: omap2plus: GPIO cleanup Igor Grinberg
2011-05-03 15:22 ` Igor Grinberg
2011-05-11 7:38 ` Igor Grinberg [this message]
2011-05-11 7:38 ` Igor Grinberg
2011-05-12 10:16 ` Tony Lindgren
2011-05-12 10:16 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DCA3D02.9070608@compulab.co.il \
--to=grinberg@compulab.co.il \
--cc=balbi@ti.com \
--cc=khilman@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=mike@compulab.co.il \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.