unsigned int mask;
        int i, ret;
 
-       ret = adxl372_set_interrupts(st, ADXL372_INT1_MAP_FIFO_FULL_MSK, 0);
+       ret = iio_triggered_buffer_postenable(indio_dev);
        if (ret < 0)
                return ret;
 
+       ret = adxl372_set_interrupts(st, ADXL372_INT1_MAP_FIFO_FULL_MSK, 0);
+       if (ret < 0)
+               goto err;
+
        mask = *indio_dev->active_scan_mask;
 
        for (i = 0; i < ARRAY_SIZE(adxl372_axis_lookup_table); i++) {
                        break;
        }
 
-       if (i == ARRAY_SIZE(adxl372_axis_lookup_table))
-               return -EINVAL;
+       if (i == ARRAY_SIZE(adxl372_axis_lookup_table)) {
+               ret = -EINVAL;
+               goto err;
+       }
 
        st->fifo_format = adxl372_axis_lookup_table[i].fifo_format;
        st->fifo_set_size = bitmap_weight(indio_dev->active_scan_mask,
        if (ret < 0) {
                st->fifo_mode = ADXL372_FIFO_BYPASSED;
                adxl372_set_interrupts(st, 0, 0);
-               return ret;
+               goto err;
        }
 
-       return iio_triggered_buffer_postenable(indio_dev);
+       return 0;
+
+err:
+       iio_triggered_buffer_predisable(indio_dev);
+       return ret;
 }
 
 static int adxl372_buffer_predisable(struct iio_dev *indio_dev)
 {
        struct adxl372_state *st = iio_priv(indio_dev);
-       int ret;
-
-       ret = iio_triggered_buffer_predisable(indio_dev);
-       if (ret < 0)
-               return ret;
 
        adxl372_set_interrupts(st, 0, 0);
        st->fifo_mode = ADXL372_FIFO_BYPASSED;
        adxl372_configure_fifo(st);
 
-       return 0;
+       return iio_triggered_buffer_predisable(indio_dev);
 }
 
 static const struct iio_buffer_setup_ops adxl372_buffer_ops = {