#include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 #include <linux/regmap.h>
 #include <linux/regulator/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_gpio.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
        /* Current sample rate for de-emphasis control */
        int             rate;
        /* GPIO driving Reset pin, if any */
-       int             gpio_nreset;
+       struct gpio_desc *reset;
        struct          regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
 };
 
 
 static void tas5086_reset(struct tas5086_private *priv)
 {
-       if (gpio_is_valid(priv->gpio_nreset)) {
+       if (priv->reset) {
                /* Reset codec - minimum assertion time is 400ns */
-               gpio_direction_output(priv->gpio_nreset, 0);
+               gpiod_direction_output(priv->reset, 1);
                udelay(1);
-               gpio_set_value(priv->gpio_nreset, 1);
+               gpiod_set_value(priv->reset, 0);
 
                /* Codec needs ~15ms to wake up */
                msleep(15);
 {
        struct tas5086_private *priv = snd_soc_component_get_drvdata(component);
 
-       if (gpio_is_valid(priv->gpio_nreset))
+       if (priv->reset)
                /* Set codec to the reset state */
-               gpio_set_value(priv->gpio_nreset, 0);
+               gpiod_set_value(priv->reset, 1);
 
        regulator_bulk_disable(ARRAY_SIZE(priv->supplies), priv->supplies);
 };
 {
        struct tas5086_private *priv;
        struct device *dev = &i2c->dev;
-       int gpio_nreset = -EINVAL;
        int i, ret;
 
        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 
        i2c_set_clientdata(i2c, priv);
 
-       gpio_nreset = of_get_named_gpio(dev->of_node, "reset-gpio", 0);
-       if (gpio_is_valid(gpio_nreset))
-               if (devm_gpio_request(dev, gpio_nreset, "TAS5086 Reset"))
-                       gpio_nreset = -EINVAL;
-
-       priv->gpio_nreset = gpio_nreset;
+       /* Request line asserted */
+       priv->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+       if (IS_ERR(priv->reset))
+               return PTR_ERR(priv->reset);
+       gpiod_set_consumer_name(priv->reset, "TAS5086 Reset");
 
        ret = regulator_bulk_enable(ARRAY_SIZE(priv->supplies), priv->supplies);
        if (ret < 0) {