ts->get_pendown_state = pdata->get_pendown_state;
        } else if (gpio_is_valid(pdata->gpio_pendown)) {
 
-               err = gpio_request(pdata->gpio_pendown, "ads7846_pendown");
+               err = gpio_request_one(pdata->gpio_pendown, GPIOF_IN,
+                                      "ads7846_pendown");
                if (err) {
-                       dev_err(&spi->dev, "failed to request pendown GPIO%d\n",
-                               pdata->gpio_pendown);
-                       return err;
-               }
-               err = gpio_direction_input(pdata->gpio_pendown);
-               if (err) {
-                       dev_err(&spi->dev, "failed to setup pendown GPIO%d\n",
-                               pdata->gpio_pendown);
-                       gpio_free(pdata->gpio_pendown);
+                       dev_err(&spi->dev,
+                               "failed to request/setup pendown GPIO%d: %d\n",
+                               pdata->gpio_pendown, err);
                        return err;
                }