.attrs = &isl29125_attribute_group,
 };
 
-static int isl29125_buffer_preenable(struct iio_dev *indio_dev)
+static int isl29125_buffer_postenable(struct iio_dev *indio_dev)
 {
        struct isl29125_data *data = iio_priv(indio_dev);
+       int err;
+
+       err = iio_triggered_buffer_postenable(indio_dev);
+       if (err)
+               return err;
 
        data->conf1 |= ISL29125_MODE_RGB;
-       return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1,
+       err = i2c_smbus_write_byte_data(data->client, ISL29125_CONF1,
                data->conf1);
+       if (err) {
+               iio_triggered_buffer_predisable(indio_dev);
+               return err;
+       }
+
+       return 0;
 }
 
 static int isl29125_buffer_predisable(struct iio_dev *indio_dev)
        struct isl29125_data *data = iio_priv(indio_dev);
        int ret;
 
-       ret = iio_triggered_buffer_predisable(indio_dev);
-       if (ret < 0)
-               return ret;
-
        data->conf1 &= ~ISL29125_MODE_MASK;
        data->conf1 |= ISL29125_MODE_PD;
-       return i2c_smbus_write_byte_data(data->client, ISL29125_CONF1,
+       ret = i2c_smbus_write_byte_data(data->client, ISL29125_CONF1,
                data->conf1);
+
+       iio_triggered_buffer_predisable(indio_dev);
+
+       return ret;
 }
 
 static const struct iio_buffer_setup_ops isl29125_buffer_setup_ops = {
-       .preenable = isl29125_buffer_preenable,
-       .postenable = &iio_triggered_buffer_postenable,
+       .postenable = isl29125_buffer_postenable,
        .predisable = isl29125_buffer_predisable,
 };