"Failed to allocate regmap: %d\n", ret);
                return ret;
        }
+       
+       max98927->reset_gpio 
+               = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_HIGH);
+       if (IS_ERR(max98927->reset_gpio)) {
+               ret = PTR_ERR(max98927->reset_gpio);
+               return dev_err_probe(&i2c->dev, ret, "failed to request GPIO reset pin");
+       }
+
+       if (max98927->reset_gpio) {
+               gpiod_set_value_cansleep(max98927->reset_gpio, 0);
+               /* Wait for i2c port to be ready */
+               usleep_range(5000, 6000);
+       }
 
        /* Check Revision ID */
        ret = regmap_read(max98927->regmap,
        return ret;
 }
 
+static int max98927_i2c_remove(struct i2c_client *i2c)
+{
+       struct max98927_priv *max98927 = i2c_get_clientdata(i2c);
+
+       if (max98927->reset_gpio) {
+               gpiod_set_value_cansleep(max98927->reset_gpio, 1);
+       }
+
+       return 0;
+}
+
 static const struct i2c_device_id max98927_i2c_id[] = {
        { "max98927", 0},
        { },
                .pm = &max98927_pm,
        },
        .probe  = max98927_i2c_probe,
+       .remove = max98927_i2c_remove,
        .id_table = max98927_i2c_id,
 };