#include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <linux/gpio.h>
+#include <linux/of.h>
 #include <linux/of_gpio.h>
 #include <sound/tlv.h>
 #include "max98373.h"
        else
                max98373->i_slot = 1;
 
+       max98373->reset_gpio = of_get_named_gpio(dev->of_node,
+                                               "maxim,reset-gpio", 0);
+       if (!gpio_is_valid(max98373->reset_gpio)) {
+               dev_err(dev, "Looking up %s property in node %s failed %d\n",
+                       "maxim,reset-gpio", dev->of_node->full_name,
+                       max98373->reset_gpio);
+       } else {
+               dev_dbg(dev, "maxim,reset-gpio=%d",
+                       max98373->reset_gpio);
+       }
+
        if (!device_property_read_u32(dev, "maxim,spkfb-slot-no", &value))
                max98373->spkfb_slot = value & 0xF;
        else
        else
                max98373->interleave_mode = false;
 
-
        /* regmap initialization */
        max98373->regmap
                = devm_regmap_init_i2c(i2c, &max98373_regmap);
                return ret;
        }
 
+       /* voltage/current slot & gpio configuration */
+       max98373_slot_config(i2c, max98373);
+
+       /* Power on device */
+       if (gpio_is_valid(max98373->reset_gpio)) {
+               ret = gpio_request(max98373->reset_gpio, "MAX98373_RESET");
+               if (ret) {
+                       dev_err(&i2c->dev, "%s: Failed to request gpio %d\n",
+                               __func__, max98373->reset_gpio);
+                       gpio_free(max98373->reset_gpio);
+                       return -EINVAL;
+               }
+               gpio_direction_output(max98373->reset_gpio, 0);
+               msleep(50);
+               gpio_direction_output(max98373->reset_gpio, 1);
+               msleep(20);
+       }
+
        /* Check Revision ID */
        ret = regmap_read(max98373->regmap,
                MAX98373_R21FF_REV_ID, ®);
        }
        dev_info(&i2c->dev, "MAX98373 revisionID: 0x%02X\n", reg);
 
-       /* voltage/current slot configuration */
-       max98373_slot_config(i2c, max98373);
-
        /* codec registeration */
        ret = devm_snd_soc_register_component(&i2c->dev, &soc_codec_dev_max98373,
                max98373_dai, ARRAY_SIZE(max98373_dai));