}
 }
 
+static int ad799x_update_config(struct ad799x_state *st, u16 config)
+{
+       int ret;
+
+       ret = ad799x_write_config(st, config);
+       if (ret < 0)
+               return ret;
+       ret = ad799x_read_config(st);
+       if (ret < 0)
+               return ret;
+       st->config = ret;
+
+       return 0;
+}
+
 /**
  * ad799x_trigger_handler() bh of trigger launched polling to ring buffer
  *
        indio_dev->channels = st->chip_config->channel;
        indio_dev->num_channels = chip_info->num_channels;
 
-       ret = ad799x_write_config(st, st->chip_config->default_config);
-       if (ret < 0)
-               goto error_disable_vref;
-       ret = ad799x_read_config(st);
-       if (ret < 0)
+       ret = ad799x_update_config(st, st->chip_config->default_config);
+       if (ret)
                goto error_disable_vref;
-       st->config = ret;
 
        ret = iio_triggered_buffer_setup(indio_dev, NULL,
                &ad799x_trigger_handler, NULL);
        return 0;
 }
 
+static int __maybe_unused ad799x_suspend(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct ad799x_state *st = iio_priv(indio_dev);
+
+       regulator_disable(st->vref);
+       regulator_disable(st->reg);
+
+       return 0;
+}
+
+static int __maybe_unused ad799x_resume(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct ad799x_state *st = iio_priv(indio_dev);
+       int ret;
+
+       ret = regulator_enable(st->reg);
+       if (ret) {
+               dev_err(dev, "Unable to enable vcc regulator\n");
+               return ret;
+       }
+       ret = regulator_enable(st->vref);
+       if (ret) {
+               regulator_disable(st->reg);
+               dev_err(dev, "Unable to enable vref regulator\n");
+               return ret;
+       }
+
+       /* resync config */
+       ret = ad799x_update_config(st, st->config);
+       if (ret) {
+               regulator_disable(st->vref);
+               regulator_disable(st->reg);
+               return ret;
+       }
+
+       return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(ad799x_pm_ops, ad799x_suspend, ad799x_resume);
+
 static const struct i2c_device_id ad799x_id[] = {
        { "ad7991", ad7991 },
        { "ad7995", ad7995 },
 static struct i2c_driver ad799x_driver = {
        .driver = {
                .name = "ad799x",
+               .pm = &ad799x_pm_ops,
        },
        .probe = ad799x_probe,
        .remove = ad799x_remove,