ARM: OMAP3530evm: set pendown_state and debounce time for ads7846
[deliverable/linux.git] / arch / arm / mach-omap2 / common-board-devices.c
index 1706ebcec08d79c08ea23191b949266613c9406e..4ba070e1288c75a06d0a468e5ac4e4ee464a93e9 100644 (file)
@@ -35,6 +35,16 @@ static struct omap2_mcspi_device_config ads7846_mcspi_config = {
        .turbo_mode     = 0,
 };
 
+/*
+ * ADS7846 driver maybe request a gpio according to the value
+ * of pdata->get_pendown_state, but we have done this. So set
+ * get_pendown_state to avoid twice gpio requesting.
+ */
+static int omap3_get_pendown_state(void)
+{
+       return !gpio_get_value(OMAP3_EVM_TS_GPIO);
+}
+
 static struct ads7846_platform_data ads7846_config = {
        .x_max                  = 0x0fff,
        .y_max                  = 0x0fff,
@@ -45,6 +55,7 @@ static struct ads7846_platform_data ads7846_config = {
        .debounce_rep           = 1,
        .gpio_pendown           = -EINVAL,
        .keep_vref_on           = 1,
+       .get_pendown_state      = &omap3_get_pendown_state,
 };
 
 static struct spi_board_info ads7846_spi_board_info __initdata = {
@@ -63,14 +74,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;
 
-       if (board_pdata && board_pdata->get_pendown_state) {
+       if (gpio_pendown) {
                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);
 
+               /* TS GPIOPendown doesn't allow user to change the direction */
+               gpio_export(gpio_pendown, false);
+
+               /* Set proper debouce time for ads7846. */
                if (gpio_debounce)
                        gpio_set_debounce(gpio_pendown, gpio_debounce);
        }
This page took 0.027378 seconds and 5 git commands to generate.