struct iio_device_config {
        unsigned int mode;
+       unsigned int watermark;
        const unsigned long *scan_mask;
        unsigned int scan_bytes;
        bool scan_timestamp;
                if (buffer == remove_buffer)
                        continue;
                modes &= buffer->access->modes;
+               config->watermark = min(config->watermark, buffer->watermark);
        }
 
-       if (insert_buffer)
+       if (insert_buffer) {
                modes &= insert_buffer->access->modes;
+               config->watermark = min(config->watermark,
+                       insert_buffer->watermark);
+       }
 
        /* Definitely possible for devices to support both of these. */
        if ((modes & INDIO_BUFFER_TRIGGERED) && indio_dev->trig) {
                }
        }
 
+       if (indio_dev->info->hwfifo_set_watermark)
+               indio_dev->info->hwfifo_set_watermark(indio_dev,
+                       config->watermark);
+
        indio_dev->currentmode = config->mode;
 
        if (indio_dev->setup_ops->postenable) {
        }
 
        buffer->watermark = val;
-
-       if (indio_dev->info->hwfifo_set_watermark)
-               indio_dev->info->hwfifo_set_watermark(indio_dev, val);
 out:
        mutex_unlock(&indio_dev->mlock);