#include <linux/device.h>
 #include <linux/errno.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/regmap.h>
 #include <linux/regulator/consumer.h>
 #include <linux/slab.h>
        struct device *dev;
        struct regmap *regmap;
        struct regulator *supply;
-       int power_gpio;
+       struct gpio_desc *power_gpio;
        enum tpa_model id;
 };
 
                        return ret;
                }
                /* Power on */
-               if (data->power_gpio >= 0)
-                       gpio_set_value(data->power_gpio, 1);
+               gpiod_set_value(data->power_gpio, 1);
 
                /* Sync registers */
                regcache_cache_only(data->regmap, false);
                        dev_err(data->dev,
                                "Failed to sync registers: %d\n", ret);
                        regcache_cache_only(data->regmap, true);
-                       if (data->power_gpio >= 0)
-                               gpio_set_value(data->power_gpio, 0);
+                       gpiod_set_value(data->power_gpio, 0);
                        ret2 = regulator_disable(data->supply);
                        if (ret2 != 0)
                                dev_err(data->dev,
                regcache_cache_only(data->regmap, true);
 
                /* Power off */
-               if (data->power_gpio >= 0)
-                       gpio_set_value(data->power_gpio, 0);
+               gpiod_set_value(data->power_gpio, 0);
 
                ret = regulator_disable(data->supply);
                if (ret != 0) {
                return PTR_ERR(data->regmap);
 
        if (np) {
-               data->power_gpio = of_get_named_gpio(np, "power-gpio", 0);
+               data->power_gpio = devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW);
+               if (IS_ERR(data->power_gpio)) {
+                       return dev_err_probe(dev, PTR_ERR(data->power_gpio),
+                                            "Failed to request power GPIO\n");
+               }
+               gpiod_set_consumer_name(data->power_gpio, "tpa6130a2 enable");
        } else {
                dev_err(dev, "Platform data not set\n");
                dump_stack();
 
        data->id = (uintptr_t)i2c_get_match_data(client);
 
-       if (data->power_gpio >= 0) {
-               ret = devm_gpio_request(dev, data->power_gpio,
-                                       "tpa6130a2 enable");
-               if (ret < 0) {
-                       dev_err(dev, "Failed to request power GPIO (%d)\n",
-                               data->power_gpio);
-                       return ret;
-               }
-               gpio_direction_output(data->power_gpio, 0);
-       }
-
        switch (data->id) {
        default:
                dev_warn(dev, "Unknown TPA model (%d). Assuming 6130A2\n",