Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: st_sensors: fix scale configuration for h3lis331dl

fix scale configuration/parsing for h3lis331dl accel driver
when sensitivity is higher than 1(m/s^2)/digit

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
Fixes: 1e52fefc9b0c ("iio: accel: Add support for the h3lis331dl accelerometer")
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Lorenzo Bianconi and committed by
Jonathan Cameron
d304286a 34eee70a

+13 -7
+8 -4
drivers/iio/accel/st_accel_core.c
··· 743 743 744 744 return IIO_VAL_INT; 745 745 case IIO_CHAN_INFO_SCALE: 746 - *val = 0; 747 - *val2 = adata->current_fullscale->gain; 746 + *val = adata->current_fullscale->gain / 1000000; 747 + *val2 = adata->current_fullscale->gain % 1000000; 748 748 return IIO_VAL_INT_PLUS_MICRO; 749 749 case IIO_CHAN_INFO_SAMP_FREQ: 750 750 *val = adata->odr; ··· 763 763 int err; 764 764 765 765 switch (mask) { 766 - case IIO_CHAN_INFO_SCALE: 767 - err = st_sensors_set_fullscale_by_gain(indio_dev, val2); 766 + case IIO_CHAN_INFO_SCALE: { 767 + int gain; 768 + 769 + gain = val * 1000000 + val2; 770 + err = st_sensors_set_fullscale_by_gain(indio_dev, gain); 768 771 break; 772 + } 769 773 case IIO_CHAN_INFO_SAMP_FREQ: 770 774 if (val2) 771 775 return -EINVAL;
+5 -3
drivers/iio/common/st_sensors/st_sensors_core.c
··· 612 612 ssize_t st_sensors_sysfs_scale_avail(struct device *dev, 613 613 struct device_attribute *attr, char *buf) 614 614 { 615 - int i, len = 0; 615 + int i, len = 0, q, r; 616 616 struct iio_dev *indio_dev = dev_get_drvdata(dev); 617 617 struct st_sensor_data *sdata = iio_priv(indio_dev); 618 618 ··· 621 621 if (sdata->sensor_settings->fs.fs_avl[i].num == 0) 622 622 break; 623 623 624 - len += scnprintf(buf + len, PAGE_SIZE - len, "0.%06u ", 625 - sdata->sensor_settings->fs.fs_avl[i].gain); 624 + q = sdata->sensor_settings->fs.fs_avl[i].gain / 1000000; 625 + r = sdata->sensor_settings->fs.fs_avl[i].gain % 1000000; 626 + 627 + len += scnprintf(buf + len, PAGE_SIZE - len, "%u.%06u ", q, r); 626 628 } 627 629 mutex_unlock(&indio_dev->mlock); 628 630 buf[len - 1] = '\n';