iio:accel:mma8452: check values to be written
[platform/kernel/linux-starfive.git] / drivers / iio / accel / mma8452.c
index e8e2077..42640b1 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/i2c.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
-#include <linux/iio/trigger_consumer.h>
 #include <linux/iio/buffer.h>
 #include <linux/iio/trigger.h>
 #include <linux/iio/trigger_consumer.h>
@@ -229,7 +228,7 @@ static int mma8452_get_hp_filter_index(struct mma8452_data *data,
        int i = mma8452_get_odr_index(data);
 
        return mma8452_get_int_plus_micros_index(mma8452_hp_filter_cutoff[i],
-               ARRAY_SIZE(mma8452_scales[0]), val, val2);
+               ARRAY_SIZE(mma8452_hp_filter_cutoff[0]), val, val2);
 }
 
 static int mma8452_read_hp_filter(struct mma8452_data *data, int *hz, int *uHz)
@@ -344,7 +343,7 @@ static int mma8452_set_hp_filter_frequency(struct mma8452_data *data,
 
        i = mma8452_get_hp_filter_index(data, val, val2);
        if (i < 0)
-               return -EINVAL;
+               return i;
 
        reg = i2c_smbus_read_byte_data(data->client,
                                       MMA8452_HP_FILTER_CUTOFF);
@@ -370,7 +369,7 @@ static int mma8452_write_raw(struct iio_dev *indio_dev,
        case IIO_CHAN_INFO_SAMP_FREQ:
                i = mma8452_get_samp_freq_index(data, val, val2);
                if (i < 0)
-                       return -EINVAL;
+                       return i;
 
                data->ctrl_reg1 &= ~MMA8452_CTRL_DR_MASK;
                data->ctrl_reg1 |= i << MMA8452_CTRL_DR_SHIFT;
@@ -379,7 +378,7 @@ static int mma8452_write_raw(struct iio_dev *indio_dev,
        case IIO_CHAN_INFO_SCALE:
                i = mma8452_get_scale_index(data, val, val2);
                if (i < 0)
-                       return -EINVAL;
+                       return i;
                data->data_cfg &= ~MMA8452_DATA_CFG_FS_MASK;
                data->data_cfg |= i;
                return mma8452_change_config(data, MMA8452_DATA_CFG,
@@ -472,15 +471,17 @@ static int mma8452_write_thresh(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_EV_INFO_VALUE:
-               return mma8452_change_config(data, MMA8452_TRANSIENT_THS,
-                                            val & MMA8452_TRANSIENT_THS_MASK);
+               if (val < 0 || val > MMA8452_TRANSIENT_THS_MASK)
+                       return -EINVAL;
+
+               return mma8452_change_config(data, MMA8452_TRANSIENT_THS, val);
 
        case IIO_EV_INFO_PERIOD:
                steps = (val * USEC_PER_SEC + val2) /
                                mma8452_transient_time_step_us[
                                        mma8452_get_odr_index(data)];
 
-               if (steps > 0xff)
+               if (steps < 0 || steps > 0xff)
                        return -EINVAL;
 
                return mma8452_change_config(data, MMA8452_TRANSIENT_COUNT,
@@ -968,6 +969,7 @@ static const struct of_device_id mma8452_dt_ids[] = {
        { .compatible = "fsl,mma8452" },
        { }
 };
+MODULE_DEVICE_TABLE(of, mma8452_dt_ids);
 
 static struct i2c_driver mma8452_driver = {
        .driver = {