diff options
author | Igor Grinberg <grinberg@compulab.co.il> | 2012-06-21 04:36:02 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-06-21 04:36:02 -0400 |
commit | 97ee9f01d6f26a69847d7a0ea07be756fe9f8eb6 (patch) | |
tree | dbfbf8bc99130470ba4561f23afe1fad5831a4f3 /arch/arm/mach-omap2/common-board-devices.c | |
parent | 485802a6c524e62b5924849dd727ddbb1497cc71 (diff) |
ARM: OMAP: fix the ads7846 init code
In case a board provides the gpio_pendown and not board_pdata,
the GPIO debounce is not taken care of.
Fix this by taking care of GPIO debounce in any case.
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/common-board-devices.c')
-rw-r--r-- | arch/arm/mach-omap2/common-board-devices.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index 1706ebcec08d..c1875862679f 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c | |||
@@ -63,28 +63,30 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, | |||
63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; | 63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; |
64 | int err; | 64 | int err; |
65 | 65 | ||
66 | if (board_pdata && board_pdata->get_pendown_state) { | 66 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); |
67 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); | 67 | if (err) { |
68 | if (err) { | 68 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); |
69 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); | 69 | return; |
70 | return; | ||
71 | } | ||
72 | gpio_export(gpio_pendown, 0); | ||
73 | |||
74 | if (gpio_debounce) | ||
75 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
76 | } | 70 | } |
77 | 71 | ||
72 | if (gpio_debounce) | ||
73 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
74 | |||
78 | spi_bi->bus_num = bus_num; | 75 | spi_bi->bus_num = bus_num; |
79 | spi_bi->irq = gpio_to_irq(gpio_pendown); | 76 | spi_bi->irq = gpio_to_irq(gpio_pendown); |
80 | 77 | ||
81 | if (board_pdata) { | 78 | if (board_pdata) { |
82 | board_pdata->gpio_pendown = gpio_pendown; | 79 | board_pdata->gpio_pendown = gpio_pendown; |
83 | spi_bi->platform_data = board_pdata; | 80 | spi_bi->platform_data = board_pdata; |
81 | if (board_pdata->get_pendown_state) | ||
82 | gpio_export(gpio_pendown, 0); | ||
84 | } else { | 83 | } else { |
85 | ads7846_config.gpio_pendown = gpio_pendown; | 84 | ads7846_config.gpio_pendown = gpio_pendown; |
86 | } | 85 | } |
87 | 86 | ||
87 | if (!board_pdata || (board_pdata && !board_pdata->get_pendown_state)) | ||
88 | gpio_free(gpio_pendown); | ||
89 | |||
88 | spi_register_board_info(&ads7846_spi_board_info, 1); | 90 | spi_register_board_info(&ads7846_spi_board_info, 1); |
89 | } | 91 | } |
90 | #else | 92 | #else |