On Mon, May 9, 2022 at 4:46 PM LI Qingwu <Qing-wu.Li@xxxxxxxxxxxxxxxxxxxxxxx> wrote: > > All the sensors can set the scales by writing the range register 0x41, > The current driver has no interface to configure it. > The commit adds the interface for config the scales. With the warnings fixed: Reviewed-by: Alexandru Ardelean <ardeleanalex@xxxxxxxxx> > > Signed-off-by: LI Qingwu <Qing-wu.Li@xxxxxxxxxxxxxxxxxxxxxxx> > --- > drivers/iio/accel/bmi088-accel-core.c | 32 +++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/iio/accel/bmi088-accel-core.c b/drivers/iio/accel/bmi088-accel-core.c > index 44cbe098c093..7c78cfb321ee 100644 > --- a/drivers/iio/accel/bmi088-accel-core.c > +++ b/drivers/iio/accel/bmi088-accel-core.c > @@ -237,6 +237,23 @@ static int bmi088_accel_set_sample_freq(struct bmi088_accel_data *data, int val) > BMI088_ACCEL_MODE_ODR_MASK, regval); > } > > +static int bmi088_accel_set_scale(struct bmi088_accel_data *data, int val, int val2) > +{ > + unsigned int i; > + int ret; > + int reg; > + > + for (i = 0; i < 4; i++) > + if (val == data->chip_info->scale_table[i][0] && > + val2 == data->chip_info->scale_table[i][1]) > + break; > + > + if (i >= 4) > + return -EINVAL; > + > + return regmap_write(data->regmap, BMI088_ACCEL_REG_ACC_RANGE, i); > +} > + > static int bmi088_accel_get_temp(struct bmi088_accel_data *data, int *val) > { > int ret; > @@ -368,7 +385,13 @@ static int bmi088_accel_read_avail(struct iio_dev *indio_dev, > const int **vals, int *type, int *length, > long mask) > { > + struct bmi088_accel_data *data = iio_priv(indio_dev); > switch (mask) { > + case IIO_CHAN_INFO_SCALE: > + *vals = (const int *)data->chip_info->scale_table; > + *length = 8; > + *type = IIO_VAL_INT_PLUS_MICRO; > + return IIO_AVAIL_LIST; > case IIO_CHAN_INFO_SAMP_FREQ: > *type = IIO_VAL_INT_PLUS_MICRO; > *vals = bmi088_sample_freqs; > @@ -388,6 +411,14 @@ static int bmi088_accel_write_raw(struct iio_dev *indio_dev, > int ret; > > switch (mask) { > + case IIO_CHAN_INFO_SCALE: > + ret = pm_runtime_resume_and_get(dev); > + if (ret) > + return ret; > + ret = bmi088_accel_set_scale(data, val, val2); > + pm_runtime_mark_last_busy(dev); > + pm_runtime_put_autosuspend(dev); > + return ret; > case IIO_CHAN_INFO_SAMP_FREQ: > ret = pm_runtime_resume_and_get(dev); > if (ret) > @@ -410,6 +441,7 @@ static int bmi088_accel_write_raw(struct iio_dev *indio_dev, > .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ > BIT(IIO_CHAN_INFO_SAMP_FREQ), \ > .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SAMP_FREQ), \ > + BIT(IIO_CHAN_INFO_SCALE ), \ > .scan_index = AXIS_##_axis, \ > } > > -- > 2.25.1 >