From: Igor Grinberg Date: Wed, 4 May 2011 15:04:55 +0000 (+0300) Subject: arm: omap2plus: fix ads7846 pendown gpio request X-Git-Tag: firefly_0821_release~7613^2~956^2~8 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e68273baf30390e9c907831b47384085c7f664d5;p=firefly-linux-kernel-4.4.55.git arm: omap2plus: fix ads7846 pendown gpio request introduced by: 96974a24 (omap: consolidate touch screen initialization among different boards) ads7846 driver can use either gpio_pendown or get_pendown_state() callback. In case of gpio_pendown, it requests the provided gpio_pendown thus resulting in double requesting that gpio: ads7846 spi1.0: failed to request pendown GPIO57 ads7846: probe of spi1.0 failed with error -16 Fix this by restricting the gpio request to the case of get_pendown_state() callback is used. Signed-off-by: Igor Grinberg Tested-by: Thomas Weber Signed-off-by: Tony Lindgren --- diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index e94903b2c65b..94ccf464677b 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c @@ -85,17 +85,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, struct spi_board_info *spi_bi = &ads7846_spi_board_info; int err; - err = gpio_request(gpio_pendown, "TS PenDown"); - if (err) { - pr_err("Could not obtain gpio for TS PenDown: %d\n", err); - return; - } - - gpio_direction_input(gpio_pendown); - gpio_export(gpio_pendown, 0); + if (board_pdata && board_pdata->get_pendown_state) { + err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); + if (err) { + pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); + return; + } + gpio_export(gpio_pendown, 0); - if (gpio_debounce) - gpio_set_debounce(gpio_pendown, gpio_debounce); + if (gpio_debounce) + gpio_set_debounce(gpio_pendown, gpio_debounce); + } ads7846_config.gpio_pendown = gpio_pendown;