Skip to content

Commit

Permalink
iio: Set device watermark based on watermark of all attached buffers
Browse files Browse the repository at this point in the history
Currently the watermark of the device is only set based on the watermark
that is set for the user space buffer. This doesn't consider the watermarks
set on any attached in-kernel buffers.

Change this so that the watermark of the device should be the minimum of
the watermarks over all attached buffers.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Oct 25, 2015
1 parent 0d0e538 commit f0566c0
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions drivers/iio/industrialio-buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ static void iio_free_scan_mask(struct iio_dev *indio_dev,

struct iio_device_config {
unsigned int mode;
unsigned int watermark;
const unsigned long *scan_mask;
unsigned int scan_bytes;
bool scan_timestamp;
Expand Down Expand Up @@ -642,10 +643,14 @@ static int iio_verify_update(struct iio_dev *indio_dev,
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) {
Expand Down Expand Up @@ -743,6 +748,10 @@ static int iio_enable_buffers(struct iio_dev *indio_dev,
}
}

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) {
Expand Down Expand Up @@ -974,9 +983,6 @@ static ssize_t iio_buffer_store_watermark(struct device *dev,
}

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);

Expand Down

0 comments on commit f0566c0

Please sign in to comment.