return st_sensors_set_dataready_irq(indio_dev, state);
 }
 
-static int st_press_buffer_preenable(struct iio_dev *indio_dev)
-{
-       return st_sensors_set_enable(indio_dev, true);
-}
-
 static int st_press_buffer_postenable(struct iio_dev *indio_dev)
 {
-       int err;
        struct st_sensor_data *press_data = iio_priv(indio_dev);
+       int err;
 
        press_data->buffer_data = kmalloc(indio_dev->scan_bytes,
                                          GFP_DMA | GFP_KERNEL);
-       if (press_data->buffer_data == NULL) {
-               err = -ENOMEM;
-               goto allocate_memory_error;
-       }
+       if (!press_data->buffer_data)
+               return -ENOMEM;
 
        err = iio_triggered_buffer_postenable(indio_dev);
        if (err < 0)
-               goto st_press_buffer_postenable_error;
+               goto st_press_free_buffer;
 
-       return err;
+       err = st_sensors_set_enable(indio_dev, true);
+       if (err < 0)
+               goto st_press_buffer_predisable;
+
+       return 0;
 
-st_press_buffer_postenable_error:
+st_press_buffer_predisable:
+       iio_triggered_buffer_predisable(indio_dev);
+st_press_free_buffer:
        kfree(press_data->buffer_data);
-allocate_memory_error:
        return err;
 }
 
 static int st_press_buffer_predisable(struct iio_dev *indio_dev)
 {
-       int err;
        struct st_sensor_data *press_data = iio_priv(indio_dev);
-
-       err = iio_triggered_buffer_predisable(indio_dev);
-       if (err < 0)
-               goto st_press_buffer_predisable_error;
+       int err, err2;
 
        err = st_sensors_set_enable(indio_dev, false);
 
-st_press_buffer_predisable_error:
+       err2 = iio_triggered_buffer_predisable(indio_dev);
+       if (!err)
+               err = err2;
+
        kfree(press_data->buffer_data);
        return err;
 }
 
 static const struct iio_buffer_setup_ops st_press_buffer_setup_ops = {
-       .preenable = &st_press_buffer_preenable,
        .postenable = &st_press_buffer_postenable,
        .predisable = &st_press_buffer_predisable,
 };