switch (mask) {
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
                ret = stm32_dfsdm_set_osrs(fl, 0, val);
                if (!ret)
                        adc->oversamp = val;
-
+               iio_device_release_direct_mode(indio_dev);
                return ret;
 
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (!val)
                        return -EINVAL;
 
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
+
                switch (ch->src) {
                case DFSDM_CHANNEL_SPI_CLOCK_INTERNAL:
                        spi_freq = adc->dfsdm->spi_master_freq;
                if (ret < 0) {
                        dev_err(&indio_dev->dev,
                                "Not able to find parameter that match!\n");
+                       iio_device_release_direct_mode(indio_dev);
                        return ret;
                }
                adc->sample_freq = val;
+               iio_device_release_direct_mode(indio_dev);
 
                return 0;
        }
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
                ret = iio_hw_consumer_enable(adc->hwc);
                if (ret < 0) {
                        dev_err(&indio_dev->dev,
                                "%s: IIO enable failed (channel %d)\n",
                                __func__, chan->channel);
+                       iio_device_release_direct_mode(indio_dev);
                        return ret;
                }
                ret = stm32_dfsdm_single_conv(indio_dev, chan, val);
                        dev_err(&indio_dev->dev,
                                "%s: Conversion failed (channel %d)\n",
                                __func__, chan->channel);
+                       iio_device_release_direct_mode(indio_dev);
                        return ret;
                }
+               iio_device_release_direct_mode(indio_dev);
                return IIO_VAL_INT;
 
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO: