unsigned int            range;
        unsigned int            adc_bit;
        int                     prox_scheme;
+       bool                    suspended;
 };
 
 static int isl29018_set_range(struct isl29018_chip *chip, unsigned long range,
        struct isl29018_chip *chip = iio_priv(indio_dev);
 
        mutex_lock(&chip->lock);
+       if (chip->suspended) {
+               mutex_unlock(&chip->lock);
+               return -EBUSY;
+       }
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
        case IIO_CHAN_INFO_PROCESSED:
        chip->lux_scale = 1;
        chip->range = 1000;
        chip->adc_bit = 16;
+       chip->suspended = false;
 
        chip->regmap = devm_regmap_init_i2c(client, &isl29018_regmap_config);
        if (IS_ERR(chip->regmap)) {
        return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int isl29018_suspend(struct device *dev)
+{
+       struct isl29018_chip *chip = iio_priv(dev_get_drvdata(dev));
+
+       mutex_lock(&chip->lock);
+
+       /* Since this driver uses only polling commands, we are by default in
+        * auto shutdown (ie, power-down) mode.
+        * So we do not have much to do here.
+        */
+       chip->suspended = true;
+
+       mutex_unlock(&chip->lock);
+       return 0;
+}
+
+static int isl29018_resume(struct device *dev)
+{
+       struct isl29018_chip *chip = iio_priv(dev_get_drvdata(dev));
+       int err;
+
+       mutex_lock(&chip->lock);
+
+       err = isl29018_chip_init(chip);
+       if (!err)
+               chip->suspended = false;
+
+       mutex_unlock(&chip->lock);
+       return err;
+}
+
+static SIMPLE_DEV_PM_OPS(isl29018_pm_ops, isl29018_suspend, isl29018_resume);
+#define ISL29018_PM_OPS (&isl29018_pm_ops)
+#else
+#define ISL29018_PM_OPS NULL
+#endif
+
 static const struct i2c_device_id isl29018_id[] = {
        {"isl29018", 0},
        {}
        .class  = I2C_CLASS_HWMON,
        .driver  = {
                        .name = "isl29018",
+                       .pm = ISL29018_PM_OPS,
                        .owner = THIS_MODULE,
                        .of_match_table = isl29018_of_match,
                    },