iio: imu: st_lsm6dsx: Limit requested watermark value to hwfifo size
authorPaul Cercueil <paul@crapouillou.net>
Mon, 17 Jan 2022 10:25:11 +0000 (10:25 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 15 Jun 2022 21:07:09 +0000 (22:07 +0100)
Instead of returning an error if the watermark value is too high, which
the core will silently ignore anyway, limit the value to the hardware
FIFO size; a lower-than-requested value is still better than using the
default, which is usually 1.

Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/20220117102512.31725-1-paul@crapouillou.net
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c

index 6b268f1..b5e4a41 100644 (file)
@@ -54,6 +54,7 @@
 #include <linux/iio/sysfs.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
+#include <linux/minmax.h>
 #include <linux/pm.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
@@ -1615,8 +1616,7 @@ int st_lsm6dsx_set_watermark(struct iio_dev *iio_dev, unsigned int val)
        struct st_lsm6dsx_hw *hw = sensor->hw;
        int err;
 
-       if (val < 1 || val > hw->settings->fifo_ops.max_size)
-               return -EINVAL;
+       val = clamp_val(val, 1, hw->settings->fifo_ops.max_size);
 
        mutex_lock(&hw->conf_lock);