#include <linux/bug.h>
 #include <linux/err.h>
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
        u8 buck1_vol[8];
        u8 buck2_vol[8];
        u8 buck5_vol[8];
-       int buck125_gpios[3];
+       struct gpio_desc *buck125_gpiods[3];
        int buck125_gpioindex;
        bool ignore_gpiodvs_side_effect;
 
        int set2 = ((max8997->buck125_gpioindex) >> 1) & 0x1;
        int set1 = ((max8997->buck125_gpioindex) >> 2) & 0x1;
 
-       gpio_set_value(max8997->buck125_gpios[0], set1);
-       gpio_set_value(max8997->buck125_gpios[1], set2);
-       gpio_set_value(max8997->buck125_gpios[2], set3);
+       gpiod_set_value(max8997->buck125_gpiods[0], set1);
+       gpiod_set_value(max8997->buck125_gpiods[1], set2);
+       gpiod_set_value(max8997->buck125_gpiods[2], set3);
 }
 
 struct voltage_map_desc {
 };
 
 #ifdef CONFIG_OF
-static int max8997_pmic_dt_parse_dvs_gpio(struct platform_device *pdev,
-                       struct max8997_platform_data *pdata,
-                       struct device_node *pmic_np)
-{
-       int i, gpio;
-
-       for (i = 0; i < 3; i++) {
-               gpio = of_get_named_gpio(pmic_np,
-                                       "max8997,pmic-buck125-dvs-gpios", i);
-               if (!gpio_is_valid(gpio)) {
-                       dev_err(&pdev->dev, "invalid gpio[%d]: %d\n", i, gpio);
-                       return -EINVAL;
-               }
-               pdata->buck125_gpios[i] = gpio;
-       }
-       return 0;
-}
-
 static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
                                        struct max8997_platform_data *pdata)
 {
        struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
        struct device_node *pmic_np, *regulators_np, *reg_np;
        struct max8997_regulator_data *rdata;
-       unsigned int i, dvs_voltage_nr = 1, ret;
+       unsigned int i, dvs_voltage_nr = 1;
 
        pmic_np = iodev->dev->of_node;
        if (!pmic_np) {
 
        if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
                                                pdata->buck5_gpiodvs) {
-               ret = max8997_pmic_dt_parse_dvs_gpio(pdev, pdata, pmic_np);
-               if (ret)
-                       return -EINVAL;
-
                if (of_property_read_u32(pmic_np,
                                "max8997,pmic-buck125-default-dvs-idx",
                                &pdata->buck125_default_idx)) {
        max8997->buck1_gpiodvs = pdata->buck1_gpiodvs;
        max8997->buck2_gpiodvs = pdata->buck2_gpiodvs;
        max8997->buck5_gpiodvs = pdata->buck5_gpiodvs;
-       memcpy(max8997->buck125_gpios, pdata->buck125_gpios, sizeof(int) * 3);
        max8997->ignore_gpiodvs_side_effect = pdata->ignore_gpiodvs_side_effect;
 
        nr_dvs = (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
         */
        if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
                        pdata->buck5_gpiodvs) {
+               const char *gpio_names[3] = {"MAX8997 SET1", "MAX8997 SET2", "MAX8997 SET3"};
 
-               if (!gpio_is_valid(pdata->buck125_gpios[0]) ||
-                               !gpio_is_valid(pdata->buck125_gpios[1]) ||
-                               !gpio_is_valid(pdata->buck125_gpios[2])) {
-                       dev_err(&pdev->dev, "GPIO NOT VALID\n");
-                       return -EINVAL;
-               }
+               for (i = 0; i < 3; i++) {
+                       enum gpiod_flags flags;
 
-               ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[0],
-                                       "MAX8997 SET1");
-               if (ret)
-                       return ret;
-
-               ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[1],
-                                       "MAX8997 SET2");
-               if (ret)
-                       return ret;
-
-               ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[2],
-                               "MAX8997 SET3");
-               if (ret)
-                       return ret;
-
-               gpio_direction_output(pdata->buck125_gpios[0],
-                               (max8997->buck125_gpioindex >> 2)
-                               & 0x1); /* SET1 */
-               gpio_direction_output(pdata->buck125_gpios[1],
-                               (max8997->buck125_gpioindex >> 1)
-                               & 0x1); /* SET2 */
-               gpio_direction_output(pdata->buck125_gpios[2],
-                               (max8997->buck125_gpioindex >> 0)
-                               & 0x1); /* SET3 */
+                       if (max8997->buck125_gpioindex & BIT(2 - i))
+                               flags = GPIOD_OUT_HIGH;
+                       else
+                               flags = GPIOD_OUT_LOW;
+
+                       max8997->buck125_gpiods[i] = devm_gpiod_get_index(iodev->dev,
+                                                                         "max8997,pmic-buck125-dvs",
+                                                                         i,
+                                                                         flags);
+                       if (IS_ERR(max8997->buck125_gpiods[i])) {
+                               ret = PTR_ERR(max8997->buck125_gpiods[i]);
+                               return dev_err_probe(iodev->dev, ret, "cant get GPIO %d (%d)\n",
+                                                    i, ret);
+                       }
+                       gpiod_set_consumer_name(max8997->buck125_gpiods[i], gpio_names[i]);
+               }
        }
 
        /* DVS-GPIO disabled */