This adds a wakeup threshold hook in sysfs, it enables us to change the threshold value on the run. For now this is the raw register value... Signed-off-by: Sean Nyekjaer <sean@xxxxxxxxxx> --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c index 2c8ad7d65d2f..cbcd7920f05d 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -657,12 +657,45 @@ static ssize_t st_lsm6dsx_sysfs_set_wakeup_enabled(struct device *dev, return len; } +static ssize_t st_lsm6dsx_sysfs_get_wakeup_threshold(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct st_lsm6dsx_sensor *sensor = iio_priv(dev_get_drvdata(dev)); + struct st_lsm6dsx_hw *hw = sensor->hw; + + return sprintf(buf, "%d\n", hw->wake_threshold); +} + +static ssize_t st_lsm6dsx_sysfs_set_wakeup_threshold(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct st_lsm6dsx_sensor *sensor = iio_priv(dev_get_drvdata(dev)); + struct st_lsm6dsx_hw *hw = sensor->hw; + int threshold; + + if (kstrtoint(buf, 0, &threshold)) + return -EINVAL; + + if ((threshold < 0) || (threshold > 31)) + return -EINVAL; + + if (!st_lsm6dsx_set_wake_threshold(hw, threshold)) + return len; + + return -EINVAL; +} + static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(st_lsm6dsx_sysfs_sampling_frequency_avail); static IIO_DEVICE_ATTR(in_accel_scale_available, 0444, st_lsm6dsx_sysfs_scale_avail, NULL, 0); static IIO_DEVICE_ATTR(wakeup_enabled, 0644, st_lsm6dsx_sysfs_get_wakeup_enabled, st_lsm6dsx_sysfs_set_wakeup_enabled, 0); +static IIO_DEVICE_ATTR(wakeup_threshold, 0644, + st_lsm6dsx_sysfs_get_wakeup_threshold, + st_lsm6dsx_sysfs_set_wakeup_threshold, 0); static IIO_DEVICE_ATTR(in_anglvel_scale_available, 0444, st_lsm6dsx_sysfs_scale_avail, NULL, 0); @@ -670,6 +703,7 @@ static struct attribute *st_lsm6dsx_acc_attributes[] = { &iio_dev_attr_sampling_frequency_available.dev_attr.attr, &iio_dev_attr_in_accel_scale_available.dev_attr.attr, &iio_dev_attr_wakeup_enabled.dev_attr.attr, + &iio_dev_attr_wakeup_threshold.dev_attr.attr, NULL, }; -- 2.22.0