*/
 
 #include <linux/err.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/export.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/irqdomain.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/pm.h>
 #include <linux/slab.h>
 #include <linux/mfd/core.h>
  * @irq_trigger: IRQ trigger to use for the interrupt to the host
  * @autosleep: bool to enable/disable stmpe autosleep
  * @autosleep_timeout: inactivity timeout in milliseconds for autosleep
- * @irq_over_gpio: true if gpio is used to get irq
- * @irq_gpio: gpio number over which irq will be requested (significant only if
- *           irq_over_gpio is true)
  */
 struct stmpe_platform_data {
        int id;
        unsigned int blocks;
        unsigned int irq_trigger;
        bool autosleep;
-       bool irq_over_gpio;
-       int irq_gpio;
        int autosleep_timeout;
 };
 
        if (pdata->id < 0)
                pdata->id = -1;
 
-       pdata->irq_gpio = of_get_named_gpio_flags(np, "irq-gpio", 0,
-                               &pdata->irq_trigger);
-       if (gpio_is_valid(pdata->irq_gpio))
-               pdata->irq_over_gpio = 1;
-       else
-               pdata->irq_trigger = IRQF_TRIGGER_NONE;
-
        of_property_read_u32(np, "st,autosleep-timeout",
                        &pdata->autosleep_timeout);
 
        struct stmpe_platform_data *pdata;
        struct device_node *np = ci->dev->of_node;
        struct stmpe *stmpe;
+       struct gpio_desc *irq_gpio;
        int ret;
        u32 val;
 
        if (ci->init)
                ci->init(stmpe);
 
-       if (pdata->irq_over_gpio) {
-               ret = devm_gpio_request_one(ci->dev, pdata->irq_gpio,
-                               GPIOF_DIR_IN, "stmpe");
-               if (ret) {
-                       dev_err(stmpe->dev, "failed to request IRQ GPIO: %d\n",
-                                       ret);
-                       return ret;
-               }
+       irq_gpio = devm_gpiod_get_optional(ci->dev, "irq", GPIOD_ASIS);
+       ret = PTR_ERR_OR_ZERO(irq_gpio);
+       if (ret) {
+               dev_err(stmpe->dev, "failed to request IRQ GPIO: %d\n", ret);
+               return ret;
+       }
 
-               stmpe->irq = gpio_to_irq(pdata->irq_gpio);
+       if (irq_gpio) {
+               stmpe->irq = gpiod_to_irq(irq_gpio);
+               pdata->irq_trigger = gpiod_is_active_low(irq_gpio) ?
+                                       IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH;
        } else {
                stmpe->irq = ci->irq;
+               pdata->irq_trigger = IRQF_TRIGGER_NONE;
        }
 
        if (stmpe->irq < 0) {