]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: accel: iis328dq: fix gain values
authorMarkus Koeniger <markus.koeniger@liebherr.com>
Wed, 7 Jan 2026 15:32:18 +0000 (16:32 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 30 Jan 2026 09:27:38 +0000 (10:27 +0100)
commit b8f15d1df2e73322e2112de21a4a7f3553c7fb60 upstream.

The sensors IIS328DQ and H3LIS331DL share one configuration but
H3LIS331DL has different gain parameters, configs therefore
need to be split up.
The gain parameters for the IIS328DQ are 0.98, 1.95 and 3.91,
depending on the selected measurement range.

See sensor manuals, chapter 2.1 "mechanical characteristics",
parameter "Sensitivity".

Datasheet: https://www.st.com/resource/en/datasheet/iis328dq.pdf
Datasheet: https://www.st.com/resource/en/datasheet/h3lis331dl.pdf
Fixes: 46e33707fe95 ("iio: accel: add support for IIS328DQ variant")
Reviewed-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
Signed-off-by: Markus Koeniger <markus.koeniger@liebherr.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/accel/st_accel_core.c

index d2104e14e2559d58616fe048a67c13703fac73f1..51d8de18e6d6d0742e6f1a2ea7030d064ae2150a 100644 (file)
@@ -517,7 +517,6 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
                .sensors_supported = {
                        [0] = H3LIS331DL_ACCEL_DEV_NAME,
-                       [1] = IIS328DQ_ACCEL_DEV_NAME,
                },
                .ch = (struct iio_chan_spec *)st_accel_12bit_channels,
                .odr = {
@@ -584,6 +583,77 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                .multi_read_bit = true,
                .bootime = 2,
        },
+       {
+               .wai = 0x32,
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
+               .sensors_supported = {
+                       [0] = IIS328DQ_ACCEL_DEV_NAME,
+               },
+               .ch = (struct iio_chan_spec *)st_accel_12bit_channels,
+               .odr = {
+                       .addr = 0x20,
+                       .mask = 0x18,
+                       .odr_avl = {
+                               { .hz = 50, .value = 0x00, },
+                               { .hz = 100, .value = 0x01, },
+                               { .hz = 400, .value = 0x02, },
+                               { .hz = 1000, .value = 0x03, },
+                       },
+               },
+               .pw = {
+                       .addr = 0x20,
+                       .mask = 0x20,
+                       .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
+                       .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
+               },
+               .enable_axis = {
+                       .addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
+                       .mask = ST_SENSORS_DEFAULT_AXIS_MASK,
+               },
+               .fs = {
+                       .addr = 0x23,
+                       .mask = 0x30,
+                       .fs_avl = {
+                               [0] = {
+                                       .num = ST_ACCEL_FS_AVL_100G,
+                                       .value = 0x00,
+                                       .gain = IIO_G_TO_M_S_2(980),
+                               },
+                               [1] = {
+                                       .num = ST_ACCEL_FS_AVL_200G,
+                                       .value = 0x01,
+                                       .gain = IIO_G_TO_M_S_2(1950),
+                               },
+                               [2] = {
+                                       .num = ST_ACCEL_FS_AVL_400G,
+                                       .value = 0x03,
+                                       .gain = IIO_G_TO_M_S_2(3910),
+                               },
+                       },
+               },
+               .bdu = {
+                       .addr = 0x23,
+                       .mask = 0x80,
+               },
+               .drdy_irq = {
+                       .int1 = {
+                               .addr = 0x22,
+                               .mask = 0x02,
+                       },
+                       .int2 = {
+                               .addr = 0x22,
+                               .mask = 0x10,
+                       },
+                       .addr_ihl = 0x22,
+                       .mask_ihl = 0x80,
+               },
+               .sim = {
+                       .addr = 0x23,
+                       .value = BIT(0),
+               },
+               .multi_read_bit = true,
+               .bootime = 2,
+       },
        {
                /* No WAI register present */
                .sensors_supported = {